当使用 Bazel 构建 C++ 并使用 GDB 启动时,VS Code 中的断点不起作用

问题描述 投票:0回答:1

使用 Windows,我位于文档文件夹中的一个简单存储库中,在其中构建了一个要调试的 C++ 文件。 我尝试了 bazel 的多个输出(请参阅注释掉的

program
属性),但除了注释掉的那个之外,所有输出都会启动,但根本不停止 - 无论是在入口处还是在断点处。中注释的 on 确实在输入时停止,但返回一个奇怪的文件路径。它不在我的文档文件夹中,而是在桌面上,尽管桌面是空的。路径也是重复的:
C:\Users\peter\Desktop\simple_project\C\Users\peter\Desktop\simple_project\main.cc

在我看来,GDB 编译的调试符号的路径是错误的。 您认为这可能是问题所在吗?如果是,我如何指定应编译成正确的符号?

这是我的launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Bazel Debug",
      "preLaunchTask": "Bazel build (debug)",
      "type": "cppdbg",
      "request": "launch",
      "cwd": "${workspaceRoot}",
       "program": "${workspaceRoot}/bazel-${workspaceFolderBasename}/${relativeFileDirname}/${fileBasenameNoExtension}.exe",
      // "program": "${workspaceRoot}/bazel-out/x64_windows-dbg/bin/${relativeFileDirname}/${fileBasenameNoExtension}.exe",
      //"program": "${workspaceRoot}/bazel-bin/${relativeFileDirname}/${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": true,
      "MIMode": "gdb",
      "targetArchitecture": "x64",
      "miDebuggerPath": "C:\\ProgramData\\cygwin64\\bin\\gdb.exe",
      "launchCompleteCommand": "exec-run",
      "sourceFileMap": {
        "${workspaceFolder}/bazel-${workspaceFolderBasename}": "${workspaceFolder}"
      },
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": false
        }
      ]
    }
  ]
}

根据tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Bazel build (debug)",
      "type": "shell",
      "command": "bazel build --compiler=C:\\ProgramData\\cygwin64\\bin\\g++.exe --strip=never -c dbg //...",
      "group": "build"
    }
  ]
}
c++ visual-studio-code gdb bazel
1个回答
0
投票

您的程序应该指向 bazel-out 内的 dbg 文件夹中的可执行文件。 所以像下面这样的东西应该有效:- “程序”:“${workspaceRoot}/bazel-out/k8-dbg/${relativeFileDirname}/${fileBasenameNoExtension}.exe”。

© www.soinside.com 2019 - 2024. All rights reserved.