首页 > 解决方案 > GDB 不再在 docker 容器内的 VS Code 中遇到断点

问题描述

一旦我设置launch.json并成功运行gdb和调试我的代码,直到发生某些事情并且所有断点都变成“灰色”,并显示以下消息:

“包含此断点的模块尚未加载或无法获取断点地址。”

但是,调试器附加到正在运行的程序,我什至可以从中执行步骤main,但仍然没有命中断点...这是使用 withcmake标志构建的 C++ 项目。gcc-DCMAKE_BUILD_TYPE=DEBUG

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": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "./MyProject/project",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/AA/workspace",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerServerAddress": "/*Cannot write here, but it's fine*/",
            "sourceFileMap": {/*Cannot write here, but it*/}
        },
    ]
}

我该如何解决这个问题?

标签: dockerdebuggingvisual-studio-codecmakegdb

解决方案


我在其他资源中寻找答案,大多数解决方案都说-g如果你用gcc. 这不是我的情况,因为我使用cmake了一个细节,我调试了在 docker 中运行的代码

当您使用来自您的用户的 VS 代码中的文件并且 docker 从另一个用户运行项目时,您应该"sourceFileMap": {}在以下位置添加选项launch.json

"sourceFileMap": {
                "/home/user/project/file.hpp" : "/home/YourNameBeyondDocker/project/file.hpp",
    ...

我在此选项中添加了错误的路径。当我把它拿出来时,我的调试器终于开始打断点了!


推荐阅读