无法使用lldb和VSCode调试简单的C ++程序

时间:2019-11-11 15:59:37

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

我正在尝试在MacOS Catalina上使用lldb和VSCode设置C ++调试器。我能够成功编译我的源代码,以输出可执行文件和.dSYM文件,并通过VSCode launch.json和task.json文件全部启动调试器。但是,我无法在编辑器中设置断点并将其反映在调试器窗口中。该程序只是一直运行。

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ build and debug ARMsim",
            "type": "cppdbg",
            "request": "launch",
            "program": "ARMsim",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb",
            "preLaunchTask": "g++ build ARMsim"
        }
    ]
}

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++ build ARMsim",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${workspaceFolder}/ARMsim.cpp",
                "-o",
                "${workspaceFolder}/ARMsim"
            ],
            "options": {
                "cwd": "/usr/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build"
        }
    ]
}

Program source code, note breakpoints on lines 9 and 10.

Debugger window text.

我唯一的想法是,这与.dSYM文件有关。我的断点未在其中反映出来,或者未将其装入lldb,或者我误解了所有这些的工作原理。我看过其他有关此问题的StackOverflow帖子,但实际上我正在使用-g标志进行编译,并且正在创建我的符号文件。

1 个答案:

答案 0 :(得分:0)

请注意,您可以设置断点。

对我来说起作用的是launch.json中的程序项需要如下所示:
"program": "${workspaceFolder}/ARMsim"

没有完全限定的路径,出现错误并且无法实际调试任何东西。

仅进行此更改,调试器便会启动,打开外部终端窗口,使源文件处于活动状态,并且在主函数的第一行停止我(因为stopAtEntry为true)。继续在断点处停止。

我能想到的另一件事是确保始终以VS Code打开文件夹,而不是单个文件。否则,VS Code将不知道工作空间文件夹是什么。

我假设其他所有设置均已正常运行。 XCode命令行工具,适当的扩展名等。如果您还没有替换库存的g ++(我根本不建议这样做),那么您实际上就是在调用clang ++。

和另外一个小字。从C ++ 11开始,您不必将文件名转换为C字符串。