VSCode:C++ 调试器无法启动或正确附加

Posted

技术标签:

【中文标题】VSCode:C++ 调试器无法启动或正确附加【英文标题】:VSCode: Debugger for C++ does not launch nor attach properly 【发布时间】: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)。但仍在调查中。

【问题讨论】:

【参考方案1】:

这里解决方案:

...在我从链接器设置中删除 GCC -s ​​标志(剥离符号表和重定位信息)后,现在调试对我有用...

从下一个链接的最后一个答案中得到它(感谢 HorstBaerbel):https://github.com/Microsoft/vscode-cpptools/issues/115#issuecomment-299334301

【讨论】:

以上是关于VSCode:C++ 调试器无法启动或正确附加的主要内容,如果未能解决你的问题,请参考以下文章

VSCode - 调试 C++ 时无法将输入输入控制台

无法在 vscode 上运行 deno 调试器

运行笑话测试时无法附加调试器

经验分享vscode远程c++工程gcc或cmake编译单步调试配置

Node.js 调试 - 无法附加调试器子进程

经验分享vscode c++ 调试无法跳转问题解决教程