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

时间:2016-07-26 14:01:51

标签: c++ ubuntu debugging visual-studio-code

我正在使用:

  • Ubuntu 16.04(我知道它不正式支持)
  • 最新的VSCode版本
  • 最新的“用于VSCode的C / C ++”版本

我的项目是一个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程序)然后,我想通过附加调试某个子程序(让我们说“foo_sub1”)。只要我可以调试子程序“foo_sub1”,我也可以在同一时间启动和调试。主项目本身不包含任何可执行文件。

几个月前,调试正在使用“附加”。对我来说,不再工作(因为VSCode更新和/或C / C ++扩展更新)。这是我的问题:

  1. 假设“foo”正在运行。 当使用“C ++ Attach”-config并设置“request”:“attach”(它被突出显示为“不是可接受的值”)时,如果未设置,它将询问属性“processId”。如果我设置“processId”,则会弹出错误“Attach not supported”。 如果我使用“C ++ Attach”-config和“request”:“launch”(在开头这是由C / C ++ - 扩展自动生成的),那么程序找到进程id,尝试附加但是随后中止消息“无法启动调试。只有在进程停止时才接受命令。” - 多么令人惊讶。

  2. 假设“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”。“ 从那里我无法继续,我必须手动终止该程序。

  3. 当我在没有VSCode的情况下使用GDB时,即仅使用本机终端,我的程序正常启动但是使用VSCode,目前似乎存在一些问题。

    这是我当前的自动生成配置,我只编辑了“cwd”和“program”路径(假设环境变量“$ {env.build_foo}”设置为“/ home / lvier / mainProject /建造/ 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链接中的注释)。它仍在调查中。

1 个答案:

答案 0 :(得分:0)


这里解决:

...在我从链接器设置中删除了GCC -s标志(带状符号表和重定位信息)之后,调试对我而言便起作用了。

< / p>

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