VSCode 的 CodeLLDB 无法与远程 gdbserver 一起使用

VSCode 的 CodeLLDB 无法与远程 gdbserver 一起使用

我目前正在尝试使用 Visual Studio Code 和 gdbserver 的 CodeLLDB 插件在 Raspberry Pi 上设置远程调试。不幸的是,这似乎不起作用,因为我设置的每个断点都是灰色的,并且它的工具提示显示“已解析的位置:0”。

CodeLLDB 的版本是v1.7.0,gdbserver 说它是(Raspbian 8.2.1-2) 8.2.1

是什么让我觉得这应该工作是,如果我使用 lldb 手动连接到 gdbserver target create /path/to/bin,那么gdb-remote host:port它就可以正常工作。有效的 lldb 版本是13.0.1,而 CodeLLDB 调试器说它是14.0.0-custom,所以也许这与它有关?

无论如何,相关部分如下launch.json所示:

{
  "type": "lldb",
  "request": "custom",
  "name": "Remote executable 'bin'",
  "preLaunchTask": "rust: remote ARM debug setup",
  "targetCreateCommands": ["target create /path/to/bin"],
  "processCreateCommands": ["gdb-remote host:port"]
}

附加信息:

  • 我试图调试的语言是
  • 二进制文件是为目标编译的arm-unknown-linux-gnueabihf
  • 我正在使用 VSCode架构Linux

我发布这半部分是为了整理我认为我所知道的内容,但显然也是希望得到帮助。任何提示将不胜感激!

答案1

在找到这个有用的小指南后,我终于开始工作了: https://github.com/vadimcn/vscode-lldb/wiki/Breakpoints-are-not-getting-hit

使用这些提示,我发现 lldb 没有将我的文件定位在我的工作区中,而是在某个/project/src目录中。这意味着我所要做的就是将以下内容添加到我的启动配置中:

"sourceMap": { "/project/src": "${workspaceFolder}/path/to/src" }

现在它就像一个魅力。对我来说唯一剩下的悬而未决的问题是这/project/src条路意味着什么。因为虽然它看起来像绝对路径,但事实并非如此,因为我的计算机上不存在这样的目录。

编辑:在与为该项目设置交叉编译的朋友讨论后,他让我意识到我们正在使用crosshttps://github.com/cross-rs/cross)它在编译过程中使用了 docker 容器。/project/src是编译期间源文件挂载到的容器中的目录。

这也终于弄清楚了为什么这个额外的步骤首先是必要的!

相关内容