我目前正在尝试使用 Visual Studio Code 和 gdbserver 的 CodeLLDB 插件在 Raspberry Pi 上设置远程调试。不幸的是,这似乎不起作用,因为我设置的每个断点都是灰色的,并且它的工具提示显示为“已解决的位置:0”。
CodeLLDB 的版本是v1.7.0
,gdbserver 说它是(Raspbian 8.2.1-2) 8.2.1
.
是什么让我认为这应该起作用的是,如果我通过 lldb 使用手动连接到 gdbservertarget 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"]
}
附加信息:
- 我要调试的语言是rust
- 二进制文件是为目标编译的
arm-unknown-linux-gnueabihf
- 我在Arch Linux上使用 VSCode
我发布这半部分是为了整理我认为我知道的内容,但显然也是希望得到帮助。任何提示将不胜感激!
在找到这个有用的小指南后,我终于让它工作了: https ://github.com/vadimcn/vscode-lldb/wiki/Breakpoints-are-not-getting-hit
使用这些技巧,我发现 lldb 将我的文件不是在我的工作区中,而是在某个
/project/src
目录中。这意味着我所要做的就是将以下内容添加到我的启动配置中:现在它就像一个魅力。对我来说,唯一剩下的悬而未决的问题是这
/project/src
条道路意味着什么。因为虽然它看起来像一个绝对路径,但它不是,因为我的机器上不存在这样的目录。编辑:在与为此项目设置交叉编译的朋友讨论后,他让我知道我们正在使用
cross
(https://github.com/cross-rs/cross),它在编译过程中使用 docker 容器./project/src
是编译期间源文件挂载到的容器中的目录。这也终于弄清楚了为什么首先需要这个额外的步骤!