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"] }
附加資訊:
- 我要調試的語言是rust
- 二進製文件是為目標編譯的
arm-unknown-linux-gnueabihf
- 我在Arch Linux上使用 VSCode
我發布這半部分是為了整理我認為我知道的內容,但顯然也是希望得到幫助。任何提示將不勝感激!
在找到這個有用的小指南後,我終於讓它工作了: 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
是編譯期間源文件掛載到的容器中的目錄。這也終於弄清楚了為什麼首先需要這個額外的步驟!