我目前正在尝试使用 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
条路意味着什么。因为虽然它看起来像绝对路径,但事实并非如此,因为我的计算机上不存在这样的目录。
编辑:在与为该项目设置交叉编译的朋友讨论后,他让我意识到我们正在使用cross
(https://github.com/cross-rs/cross)它在编译过程中使用了 docker 容器。/project/src
是编译期间源文件挂载到的容器中的目录。
这也终于弄清楚了为什么这个额外的步骤首先是必要的!