task.json 的配置
{
"type": "shell",
"label": "C/C++: g++ 编译 c++ 文件",
"command": "g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${workspaceFolder}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
},
launch.json 文件内容
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "E:\\gcc\\mingw64\\bin\\gdb.exe",
"preLaunchTask": "C/C++: g++ 编译 c++ 文件"
}
使用以上的配置进行 c++ 文件调试时断点失效。如果把 task.json 的 args 中的 ${workspaceFolder} 和 lanuch.json 的 program 中的 ${workspaceFolder} 都改为 ${fileDirname} 时可以正常断点调试。这两者的区别是 ${fileDirname} 的配置源文件和可执行文件都在同一个目录,也就是说如果不在同一个目录会导致断点失效。为了解决这个问题我试了一下使用 sourceFileMap 的映射配置,但发现无论怎么配都无法让断点生效。
"sourceFileMap": {
"${fileDirname}": "${workspaceFolder}",
// "${workspaceFolder}": "${fileDirname}",
}
sourceFileMap 也尝试了使用硬编码路径的方式,但依然不行。请问一下在源文件和执行文件在不同目录下应该怎么配才能让断点生效。