使用 VSCode 遠端 圖形化 GDB 除錯 嵌入式linux
目錄標題
引言
之前說了,通過core dump找程式bug,但是有些時候排查問題的還是不夠高效,命令列形式gdb還是太簡陋了,在IDE debug程式碼打斷點,查堆疊變數那些習以為常的東西,在gdb這裡怎麼用怎麼不習慣,視覺化操作不比敲命令列來的香嗎?
最近正好研究了下vscode remote ssh + gdbserver 除錯。相對來說體驗比較像IDE了,基本的單步,直接程式碼上打斷點,條件斷點,變數監控,堆疊顯示那些已經算湊活了。
環境
我目前的環境主要包括三部分:
- 日常使用的windows
- 從同事那邊拷過來的VM Linux虛擬機器開發環境,純做編譯。
- 目標嵌入式linux裝置
目前基本工作流程是,在windows上通過vscode remote ssh 套件訪問虛擬機器做程式碼開發及編譯工作,再nfs之類的工具將程式碼拷到目標嵌入式裝置上執行。
工作基本都在windows上,虛擬機器開機了就用不管了。
步驟
vscode remote ssh 配置
安裝如圖外掛。
側邊欄會多出一個遠端資源管理器。新增你要連線的ssh 地址就好了。
配置檔案 裡面會加上你新增的地址。
Host 1.1.1.1 HostName 1.1.1.1 User username # 填寫登陸遠端伺服器的使用者的名字,這個一行需要手動新增
Linux編譯機配置
我這邊由於是同事那邊考過來的現成環境,所以那些ssh,gdb都已經安裝好了,開箱即用。沒有的需要自行補上。
裝置板端配置
沒有gdbserver,先裝gdbserver。
通過以下命令,啟動gdbserver。
gdbserver localhost:9555 ./your_process_name
埠自己配,程式名字填自己程式的路徑名字。
vscode launch設定
上面,板端gdbserver啟動了,windows也能連線linux虛擬機器,但是虛擬機器的gdb還沒和gdbserver對應上。這部分的工作也是windows上用vscode launch.json檔案來配置。
側邊欄新增配置 。
{
"name": "(gdb) 啟動",
"type": "cppdbg",
"request": "launch",
"program": "輸入程式名稱,例如 ${workspaceFolder}/a.out", //改成自己的
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gdb", // 需要自行新增,gdb的路徑
"miDebuggerServerAddress": "1.2.3.4:9555", //自行新增 gdbserver 的ip埠
"setupCommands": [
{
"description": "為 gdb 啟用整齊列印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
需要修改新增的實際上就三個欄位
“program”
“miDebuggerPath”
“miDebuggerServerAddress”
除錯
vscode 連線 ssh,按F5即可開始除錯。
板端可以看到以下提示,說明已經愉快的進行除錯了。
Listening on port 9555
Remote debugging from host 1.1.1.1