当前位置: 首页 > 知识库问答 >
问题:

在macOS上用Visual Studio代码调试C++标准库

轩辕阳焱
2023-03-14

在我的场景中,我使用CLANG/LLVM编译器和LLDB调试器。

由于某种未知的原因,我无法调试C++标准库。我可以单步执行应用程序中定义的符号,但无法执行标准符号,例如std::vector构造函数。

目前还不清楚这是不正确的配置还是这些工具的限制。在web上搜索,我注意到使用GNU工具链的C++标准库调试在Linux上确实工作得很好。

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: clang++ build active file",
            "command": "/usr/bin/clang++",
            "args": [
                "-std=c++17",
                "-stdlib=libc++",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: /usr/bin/clang++"
        }
    ]
}

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "externalTerminal",
            "MIMode": "lldb",
            "preLaunchTask": "${defaultBuildTask}"
        }
    ]
}

共有1个答案

羊舌炯
2023-03-14

Microsoft C/C++扩展支持团队指出,这是由于LLDB的默认配置造成的。事实上,target.process.thread.step-vave-regexp默认设置为^std:::

(lldb) settings show target.process.thread.step-avoid-regexp
target.process.thread.step-avoid-regexp (regex) = ^std::

将此设置更改为,调试器也可以单步执行标准模板符号。这可以在launch.json配置文件中配置,方法是添加:

"setupCommands": [
    {
        "text": "settings set target.process.thread.step-avoid-regexp \"\"",
        "description": "Enable stepping into STL"
    }
]

或者,也可以通过将此配置放在主目录中的.gdbinit文件中,在用户级别进行设置:

settings set target.process.thread.step-avoid-regexp ""
 类似资料:
  • 问题内容: 我有一个用汇编语言编写的函数,并在64位Linux(Ubuntu)上使用yasm和GCC进行了编译。它只是使用来向stdout打印一条消息,如下所示: 它由使用GCC编译的C程序调用: 生成命令: 这是问题所在: 运行该程序时,它会显示错误消息,并在调用以下命令时立即出现段错误: 用objdump拆解后,我看到调用是用错误的地址进行的: (671是下一条指令的地址,而不是的地址) 但是

  • 我把我的代码作为一个独立的。c文件并阅读,为了调试,该文件必须在一个项目中。因此,我创建了一个空项目,并向其中添加了我的文件,设置了一些断点,当我运行调试器时,我在控制台上看到以下内容: 尝试了一些教程和一些视频,但没有成功。有人知道解决办法吗?有没有更简单的方法来调试. c文件?

  • 就处理编译/链接错误而言,我是一个新手。 我正在使用一个很大的C++代码(还有一些C文件)。我已经成功地在Mac上运行了它,用G++编译。现在我需要在基于Linux的集群上运行它,因为它在我的Mac上太慢了。代码由我必须编译的几个库组成,加上我自己使用这些库的代码。 我可以使用默认的g++编译器编译集群上的所有代码。然而,不幸的是,我已经发现我需要用GCC/4.7.2进行编译,这样代码将与集群上的

  • 我正在使用VS代码来调试使用Windows Subsystem for Linux的'C'代码。我基本上想用一个基于linux的编译器来编译“C”代码,用于操作系统的课程。我已将Visual Studio代码上的默认终端设置为“wsl”。单击debug按钮时,我会得到以下错误“无法开始调试”。miDebuggerPath的值无效“我验证了'gdb'安装在Windows Subsystem for

  • 场景: 我试图在Sabayon Linux下的Visual Studio代码上调试ASP.NET核心项目。当我点击F5时,我得到以下消息: launch.json }

  • 如果你在Electron中遇到崩溃或问题并且你认为它不是由你的JavaScript应用程序引起的,而是由Electron本身引起的,调试起来可能有点棘手,特别是对于不习惯native / C ++调试的开发人员. 然而,使用lldb和Electron源代码,在Electron的源代码中使用断点启用逐步调试是相当容易的. 要求 Electron 的调试版本: 最简单的方法是使用macOS的构建说明中