【发布时间】:2016-11-30 05:28:15
【问题描述】:
我正在使用:
- Ubuntu 16.04(我知道官方不支持)
- VSCode 最新版本
- 最新的“C/C++ for VSCode”版本
我的项目是一个C++项目,结构如下:
- /home/lvier/mainProject/fooProject (源代码)
- /home/lvier/mainProject/build/fooProject (二进制文件)
我在子项目“/home/lvier/mainProject/fooProject”中工作,在“/home/lvier/mainProject/build/fooProject”中有很多子程序(比如说"foo", "foo_sub1", "foo_sub2" ...)。
我的目标:
我想启动程序“foo”(它启动所有其他 foo_sub-programs),然后,我想通过附加到某个子程序(比如说“foo_sub1”)来调试它。只要我可以调试子程序“foo_sub1”,我也可以同时启动和调试。主项目本身不包含任何可执行文件。
几个月前,调试正在使用“附加”。对我来说,它不再工作了(因为 VSCode 更新和/或 C/C++ 扩展更新)。这是我的问题:
假设“foo”正在运行。 使用“C++ Attach”-config 并设置“request”:“attach”(突出显示为“not an accepted value”)时,如果未设置,它将询问属性“processId”。如果我设置“processId”,则会弹出错误“不支持附加”。 如果我使用带有“request”的“C++ Attach”-config:“launch”(一开始这是由 C/C++-extension 自动生成的),那么程序会找到进程 ID,尝试附加但随后中止消息“无法开始调试。仅在进程停止时接受命令。” - 真是惊喜。
假设“foo”尚未运行。 使用“C++ Launch”-config 时,程序会启动,但不会出现 UI 元素。相反,它从弹出一个新终端开始,上面写着“警告 gdb 未能设置不允许的控制终端操作”暂时,并且在 VSCode 的内部控制台中,它声明它停止在某些代码行(我没有定义的断点)并打印 “由于共享库事件而停止(未添加或删除库) 已加载“/lib64/ld-linux-x86-64.so.2”。已加载符号。 [启用使用 libthread_db 进行线程调试] 使用主机 libthread_db 库“/lib/x86_64-linux-gnu/libthread_db.so.1”。 从那里我无法继续,我必须手动终止程序。
当我在没有 VSCode 的情况下使用 GDB 时,即仅通过本机终端,我的程序可以正常启动,但使用 VSCode,目前似乎存在一些问题。
这是我当前的自动生成配置,我只编辑了“cwd”和“程序”路径(假设环境变量“${env.build_foo}”设置为“/home/lvier/mainProject /build/fooProject"):
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"targetArchitecture": "x64",
"program": "${env.build_foo}/foo",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": true,
"linux": {
"MIMode": "gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb"
}
},
{
"name": "C++ Attach",
"type": "cppdbg",
"targetArchitecture": "x64",
"request": "launch", // <-- "attach" is not allowed (anymore)! :(
"program": "${env.build_foo}/foo_sub1",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": [],
"processId": "${command.pickProcess}",
"externalConsole": false,
"linux": {
"MIMode": "gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb"
}
}
]
}
到目前为止,我真的很沮丧,仍然不想放弃 VSCode(我还不想切换到另一个 IDE)。我已经搜索了很多其他问题,并尝试设置其他一些配置属性,但都没有帮助。
调试器是否也有其他问题,或者这是扩展的一般问题(...和 Ubuntu 16.04)? 我很高兴有任何帮助或方便的解决方法。提前致谢!
注意: 我还在相关的github页面上创建了一个线程(见https://github.com/Microsoft/vscppsamples/issues/115)
2016 年 7 月 26 日更新: 似乎 C/C++ 扩展存在错误(请参阅上面 github 链接中的 cmets)。但仍在调查中。
【问题讨论】:
标签: c++ ubuntu debugging visual-studio-code