Arch-Linux

VSCode 的 CodeLLDB 無法與遠端 gdbserver 一起使用

  • May 22, 2022

我目前正在嘗試使用 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目錄中。這意味著我所要做的就是將以下內容添加到我的啟動配置中:

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

現在它就像一個魅力。對我來說,唯一剩下的懸而未決的問題是這/project/src條道路意味著什麼。因為雖然它看起來像一個絕對路徑,但它不是,因為我的機器上不存在這樣的目錄。

編輯:在與為此項目設置交叉編譯的朋友討論後,他讓我知道我們正在使用crosshttps://github.com/cross-rs/cross),它在編譯過程中使用 docker 容器. /project/src是編譯期間源文件掛載到的容器中的目錄。

這也終於弄清楚了為什麼首先需要這個額外的步驟!

引用自:https://unix.stackexchange.com/questions/703191