windows下 vscode 连接VMware虚拟机 c++开发环境搭建(Ubuntu为例),超详细,看这一篇就够了
引言
本文将详细介绍如何在windows环境下通过vscode连接虚拟机搭建c++开发环境。
依赖环境
主机环境:windows操作系统(我是win11)
VMware虚拟机:已安装Linux或其他目标系统(Ubuntu)。
vscode:在windows上安装vscode
工具链:linux需要安装gcc/g++(c++开发建议用g++)、gdb环境,Ubuntu下可通过g++ --version命令查看是否安装,如果安装会显示版本信息

如果未安装,可通过如下命令进行安装,也可以自己编译源码,这个暂时不做展开
sudo apt install g++ sudo apt install gdb 第一步:vscode安装Remote - SSH扩展,linux下安装OpenSSH
可通过扩展图标或者按下Ctrl+Shift+X搜索安装Remote - SSH扩展

linux可直接用以下命令安装openssh服务,
# 更新软件包列表 sudo apt update # 安装OpenSSH服务器 sudo apt install openssh-server -y # 启动SSH服务 sudo systemctl start ssh # 设置开机自启动 sudo systemctl enable ssh # 检查服务状态 sudo systemctl status ssh # 验证SSH是否在监听(可选) sudo netstat -tlnp | grep :22linux下输入ifconfig查询IP地址,新版推荐用ip addr查询,记住这个IP地址。
第二步:连接虚拟机
配置SSH连接:
- 打开命令面板(Ctrl+Shift+P)
- 输入"Remote-SSH: Add New SSH Host"
- 按格式输入连接信息:ssh
username@虚拟机IP
选择保存到默认配置文件(通常为C:\Users\你的用户名\.ssh\config),配置文件内容一般为如下格式
Host MyUbuntuVM # 一个你容易记的别名 HostName 192.168.1.100 # 替换为你在第一步查到的Ubuntu虚拟机IP User your_username # 替换为你在Ubuntu系统中的用户名接下来可在列表中看到连接对象,点击连接,可鼠标右键选择,也可点击右边的小箭头,选择在当前窗口还是新窗口建立连接,首次连接时会提示验证,输入虚拟机密码后完成认证,连接成功后会显示已连接

此时可在资源管理中选择打开文件夹

可以看到远程linux文件列表,选中确定即可管理该目录下文件,也可以通过左上角文件管理打开远程文件


此时可以打开终端,就可以像在虚拟机上一样执行各种命令了

第三步:c++环境搭建
在扩展中安装如下插件,cmake如果需要用cmake管理程序可以安装,注意一定要在SSH连接远程服务器上安装,不是在本地

接下来需要配置三个文件,在.vscode下创建/修改c_cpp_properties.json,添加以下内容
{ "configurations": [ { // 配置名称,在VSCode中显示为配置选项 "name": "Linux", // 头文件搜索路径 // "${workspaceFolder}/**" 表示包含工作区所有文件夹及其子文件夹 "includePath": [ "${workspaceFolder}/**", // 如果需要添加系统特定头文件路径,可以在这里添加,例如: // "/usr/local/include", // "/usr/include/c++/11" ], // 预处理器宏定义 // 可以在这里定义项目特定的宏,例如: // ["DEBUG", "LINUX_BUILD"] "defines": [], // 编译器路径,指定使用的G++编译器位置 // 在Ubuntu系统中,这通常是GCC/G++的标准安装路径 "compilerPath": "/usr/bin/g++", // C语言标准设置 // "gnu17" 表示使用GNU C17标准(C17带有GNU扩展,也可用不带GNU扩展的) "cStandard": "gnu17", // C++语言标准设置 // "gnu++17" 表示使用GNU C++17标准(C++17带有GNU扩展,也可用不带GNU扩展的) "cppStandard": "gnu++17", // IntelliSense模式设置 // "linux-gcc-x64" 表示针对Linux平台、GCC编译器、x64架构的智能感知 "intelliSenseMode": "linux-gcc-x64", // 以下是一些可选但建议添加的配置项: // "compilerArgs": [ // "-Wall", // 开启所有警告 // "-Wextra", // 开启额外警告 // "-O2" // 优化级别 // ], // "browse": { // "path": [ // "${workspaceFolder}/**", // "/usr/include", // "/usr/local/include" // ], // "limitSymbolsToIncludedHeaders": true // } } ], // 配置文件版本号,固定为4 "version": 4 }在.vscode下创建tasks.json文件,填入以下内容:
{ "tasks": [ { // 任务类型,cppbuild 表示这是C/C++编译任务 "type": "cppbuild", // 任务标签,在命令面板中显示的名称 "label": "C/C++: g++ 生成活动文件", // 使用的编译器路径 "command": "/usr/bin/g++", // 编译参数列表 "args": [ "-fdiagnostics-color=always", // 始终使用彩色诊断信息 "-g", // 生成调试信息 "${file}", // 要编译的当前活动文件 "-o", // 指定输出文件 "${fileDirname}/${fileBasenameNoExtension}" // 输出路径:同目录下与源文件同名的可执行文件 ], // 执行任务的工作目录 "options": { "cwd": "${fileDirname}" // 在源文件所在目录执行 }, // 问题匹配器,用于解析编译器输出并在问题面板显示错误/警告 "problemMatcher": [ "$gcc" // 使用GCC问题匹配器 ], // 任务分组配置 "group": { "kind": "build", // 属于构建组 "isDefault": true // 作为默认构建任务 }, // 任务描述信息 "detail": "调试器生成的任务。" } ], // 配置文件版本号 "version": "2.0.0" }调试相关配置需要在.vscode/launch.json文件添加
{ // 配置数组,可以包含多个调试配置 "configurations": [ { // 配置名称,在调试下拉菜单中显示 "name": "C/C++: g++ 构建和调试活动文件", // 调试器类型,cppdbg 表示使用C++调试器 "type": "cppdbg", // 请求类型,launch 表示启动新程序进行调试 "request": "launch", // 要调试的程序路径 // 使用变量:当前文件所在目录 + 当前文件名(无扩展名) "program": "${fileDirname}/${fileBasenameNoExtension}", // 传递给程序的命令行参数 "args": [], // 是否在程序入口点(main函数)自动暂停 "stopAtEntry": false, // 调试器的工作目录 "cwd": "${fileDirname}", // 环境变量设置 "environment": [], // 是否使用外部控制台(false表示使用VSCode集成终端) "externalConsole": false, // 调试器模式,gdb 表示使用GNU调试器 "MIMode": "gdb", // 调试器初始化命令 "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], // 调试前执行的任务名称,必须与tasks.json中的label完全匹配 "preLaunchTask": "C/C++: g++ 生成活动文件", // GDB调试器的路径 "miDebuggerPath": "/usr/bin/gdb" } ], // 配置文件版本号 "version": "2.0.0" }测试c++代码运行,直接点击运行,或者用命令行编译运行,可以看到已经成功输出,后面的gdb打印是程序执行完毕后正常打印

接下来打个断点,点击调试或者按F5可进入调试阶段,可以看到调试正常运行,可在控制台看到调试相关信息


注意事项
🚨 常见问题与解决方案
1. 连接问题
- 问题描述:SSH连接失败,提示"Connection refused"或超时。
- 解决方案:
- 检查SSH服务:确保虚拟机SSH服务正常运行
sudo systemctl status ssh。 - 确认IP地址:虚拟机IP可能变更,每次启动后使用
ip addr确认。 - 检查防火墙:Ubuntu默认防火墙通常不会阻止SSH,如遇问题可尝试
sudo ufw allow ssh
- 检查SSH服务:确保虚拟机SSH服务正常运行
- 问题描述:权限错误,提示"Permission denied"。
- 解决方案:
- 检查用户名和密码是否正确。
- 如需免密登录,可配置SSH密钥。
2. 环境配置问题
- 问题描述:VSCode中C++扩展功能不正常(如无法跳转定义、智能提示失效)。
- 解决方案:
- 确保C++扩展安装在远程:在VSCode扩展界面,确认C/C++扩展显示"已安装在 SSH:目标地址"。
- 检查编译器路径:在
c_cpp_properties.json中确保compilerPath正确(如"/usr/bin/g++")。 - 重新扫描编译器:在远程环境中,按
Ctrl+Shift+P,执行"C/C++: 编辑配置"。
- 问题描述:编译错误,提示"g++: not found"或类似信息。
- 解决方案:
- 安装编译工具:
sudo apt install build-essential gdb。 - 验证安装:在虚拟机终端执行
g++ --version。
- 安装编译工具:
3. 调试与运行问题
- 问题描述:调试器无法启动,提示"Unable to start debugging"。
- 解决方案:
- 检查GDB路径:在
launch.json中确保miDebuggerPath正确(如"/usr/bin/gdb")。 - 检查preLaunchTask:
launch.json中的preLaunchTask需与tasks.json中的label完全一致。 - 验证程序路径:
program字段指向的可执行文件路径需正确。
- 检查GDB路径:在
- 问题描述:调试过程中GDB卡住或无响应。
- 解决方案:
- 可尝试使用CMake Tools插件作为替代方案。
- 检查虚拟机资源(内存、CPU)是否充足。
- 问题描述:库版本不兼容(如glibc、libstdc++版本问题)。
- 解决方案:
- 升级远程主机库:
sudo apt-get update && sudo apt-get upgrade libc6 libstdc++6。 - 考虑使用静态链接的VSCode服务器或容器方案。
- 升级远程主机库:
总结
本文详细讲解了如何在windows环境下通过vscode连接虚拟机搭建c++开发环境,我个人一般是在虚拟机上做学习作用,虽然是在本机虚拟机上实现,但是实际工作中连接物理服务器是类似的操作。