【问题标题】:Unable to debug simple C++ program with lldb and VSCode无法使用 lldb 和 VSCode 调试简单的 C++ 程序
【发布时间】:2020-03-07 08:08:46
【问题描述】:

我正在尝试在 MacOS Catalina 上使用 lldb 和 VSCode 设置 C++ 调试器。我能够成功编译我的源代码以输出可执行文件和 .dSYM 文件,并通过 VSCode launch.json 和 tasks.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 标志进行编译,并且正在创建我的符号文件。

【问题讨论】:

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


    【解决方案1】:

    小记,你可以设置断点。

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

    如果没有完全限定的路径,我会收到错误并且实际上无法调试任何东西。

    仅通过该更改,我的调试器启动,外部终端窗口打开,源文件处于活动状态,并且我在 main 函数的第一行停止(因为 stopAtEntry 为真)。继续在断点处停止。

    我唯一能想到的另一件事是确保您始终在 VS Code 中打开文件夹,而不是单个文件。否则 VS Code 不会知道工作区文件夹是什么。

    我假设其他一切都已设置并正常工作。 XCode 命令行工具、适当的扩展等。如果您还没有替换现有的 g++(我根本不推荐),那么您实际上只是在调用 clang++。

    还有一个小笔记。从 C++11 开始,您不必将文件名转换为 C 字符串。

    【讨论】:

    • 我进行了更改,但不幸的是它仍然无法正常工作。我通过从终端导航到目录并使用“code”来启动 VS Code。所以这不应该是一个问题。我安装了 XCode 命令行工具,并且正在使用 Microsoft“C/C++”智能、调试和代码浏览扩展。我也有“Code Runner”扩展,但老实说,我真的不知道我应该使用哪些扩展。
    • 另一个问题,如果我调用clang++而不是g++有什么关系?在我的 usr/bin 中进行了一些挖掘之后,我相当肯定这正在发生。
    • 不幸的是,我无法推测还有哪些未正确设置或配置。我可能会建议对您现有的 json 文件进行核对,并让 VS Code 为您重新生成它们。 'do X on active file' 版本非常好,您只需确保要调试的文件当前处于活动状态。您可以使用g++ --version 轻松验证您的编译器。我补充说,这更像是一个提醒。例如,我不得不不断地告诉学生用实验室编译器测试他们的代码,因为我不在乎它是否在他们的机器上编译。它需要在实验室编译才能分级。
    • 我在运行 Mojave 的 MBP 上对最新的 VS Code 进行了测试。如果 XCode 最近更新了,你需要打开它以便配置东西。
    猜你喜欢
    • 2016-03-05
    • 2020-03-20
    • 2023-02-26
    • 2014-01-24
    • 1970-01-01
    • 2015-12-20
    • 2021-08-10
    • 2015-07-27
    • 2021-11-02
    相关资源
    最近更新 更多