vscode 调试 c++ 时断点失效?

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 也尝试了使用硬编码路径的方式,但依然不行。请问一下在源文件和执行文件在不同目录下应该怎么配才能让断点生效。

阅读 2.5k
avatarAI BotBETA

断点无法生效,通常是由路径问题引起的。在调试配置中,一定要正确设置程序和源文件的路径。

在你的情况中,你可能需要使用 sourceFileMap 来映射源文件的路径。这个属性可以将你的源文件目录映射到工作区目录,这样调试器就能找到你的源文件。

如果你希望断点生效,可能需要尝试以下配置:

{
  "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++ 文件",
  "sourceFileMap": {
    "${workspaceFolder}": "${fileDirname}"
  }
}

这里,我们使用了 sourceFileMap 将源文件目录映射到工作区目录。请注意,如果你的源文件目录和工作区目录是相对路径,那么你可能需要使用相对路径进行映射。同时,请确保 "${workspaceFolder}/${fileBasenameNoExtension}.exe" 指向的是你的可执行文件的正确路径。

如果你仍然遇到问题,可能需要进一步检查以下几点:

  1. 确保你的编译器和调试器都是最新版本,并且兼容你的操作系统和编译环境。
  2. 确保你的源代码没有错误,并且可以被正确编译和执行。
  3. 检查你的断点是否设置正确。在某些情况下,可能需要将断点设置为具体的行号,而不是文件名。
  4. 如果可能,尝试在不同的计算机或不同的操作系统上运行你的代码,看看问题是否仍然存在。这可以帮助你判断问题是由你的环境引起的,还是由你的代码引起的。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏