docker - 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*/}
},
]
}
我该如何解决这个问题?
解决方案
我在其他资源中寻找答案,大多数解决方案都说-g
如果你用gcc
. 这不是我的情况,因为我使用cmake
了一个细节,我调试了在 docker 中运行的代码。
当您使用来自您的用户的 VS 代码中的文件并且 docker 从另一个用户运行项目时,您应该"sourceFileMap": {}
在以下位置添加选项launch.json
:
"sourceFileMap": {
"/home/user/project/file.hpp" : "/home/YourNameBeyondDocker/project/file.hpp",
...
我在此选项中添加了错误的路径。当我把它拿出来时,我的调试器终于开始打断点了!