Linux平台C++ MSBuild项目在Visual Studio可编译但无法启动
问题原因
该问题是Visual Studio远程调试Linux项目时gdb启动失败导致的,核心诱因分为三类:
- 项目调试配置错误
.vcxproj.user文件中RemoteGDBPath字段为空,VS无法定位远程服务器上的gdb可执行文件RemoteDebuggingTarget字段格式错误,该字段需要引用Visual Studio连接管理器中预存的连接标识,不能手动填写IP、用户名组合RemoteDebuggerWorkingDirectory字段使用占位符{the-path},未替换为远程服务器上实际存在、对应用户有读写权限的目录
- 重装后的Debian系统配置异常
- 新版Debian默认开启ptrace限制,阻止gdb附加到用户进程
- SSH服务默认禁用了TCP端口转发,VS需要通过SSH隧道传输gdb与gdbserver的通信数据
- 缺少调试依赖包,仅安装基础gdb、gdbserver未安装libstdc++调试组件
- 路径不匹配:远程编译输出的可执行文件路径与调试配置中指定的启动路径不一致,VS找不到要调试的程序
排查解决步骤
- 修正项目调试配置
- 打开Visual Studio顶部菜单
工具 > 选项 > 跨平台 > 连接管理器,删除原有远程连接后重新添加,确保连接测试通过 - 右键项目打开属性页,切换到
调试标签页:- 远程调试目标选择刚才在连接管理器中添加的服务器,不要手动填写IP信息
- 远程GDB路径填写服务器上gdb的实际路径,可在服务器执行
which gdb获取,通常为/usr/bin/gdb - 远程工作目录填写实际存在的目录,比如你配置的
~/debug对应的绝对路径/home/你的用户名/debug - 调试命令填写远程编译生成的可执行文件完整路径,比如
/home/你的用户名/debug/xy/xy.out
- 确认保存后
.vcxproj.user中对应字段已被自动填充为有效值,不要手动修改占位符
- 打开Visual Studio顶部菜单
- 修正Debian服务器配置
- 执行
sudo apt install -y gdb gdbserver libstdc++6-dbg安装完整调试依赖 - 临时放开ptrace限制测试:执行
sudo sysctl kernel.yama.ptrace_scope=0,如果调试恢复正常,可将kernel.yama.ptrace_scope = 0写入/etc/sysctl.conf永久生效 - 打开
/etc/ssh/sshd_config,确认AllowTcpForwarding yes配置项未被注释,修改后执行sudo systemctl restart sshd重启SSH服务生效
- 执行
- 兼容性验证
- 确认服务器上gdb的大版本号与Visual Studio跨平台组件使用的gdb版本一致,例如Debian 12自带的gdb 12.x对应VS 2022的默认gdb版本
- 手动在服务器上执行编译生成的可执行文件,确认程序可正常启动,不存在缺少动态库的问题
内容的提问来源于stack exchange,提问作者nullpointer producer
相关产品推荐
相关产品推荐

