但是很多ARM Linux專用裝置是沒有圖形界面和顯示器的,當出現問題時,可以在ARM裝置上運作gdbserver,然後在PC機上運作vscode圖形調試界面進行圖形化調試就成一種重要排查手段,近年來ARM CPU往往是雙核,四核,性能跟小電腦一樣,這種遠端調試不算太慢。這一次我排查是一個RV1126 上應用的段錯誤問題,就用上這個手段。
開發環境
首先要在ARM闆上移植gdb和gdbserver ,然後把gdb布署到RV1126闆上
具體過程可以參考我的另一篇文章
《瑞芯微 RV1126上gdb移植和調試,适用于所有armv7的CPU》
然後在PC機上安裝 gdb-multiarch
sudo apt install gdb-multiarch
當然還要安裝vscode
編譯和調試準備
首先所有代碼要用-g參數加入調試資訊,為了保險可以用-O0 取消所有優化。
在vscode中要建立一個launch.json.json的執行檔案來配置遠端調試
點選左側運作和調試,點選“建立launch.json檔案"
通常會提供一個模闆給你改寫,但我隻有兩行,是以直接拷貝進去如下模闆
{
// 使用 IntelliSense 了解相關屬性。
// 懸停以檢視現有屬性的描述。
// 欲了解更多資訊,請通路: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/bin/track",
"stopAtEntry": true,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"launchCompleteCommand": "exec-run",
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb-multiarch",
"miDebuggerServerAddress": "192.168.144.99:6666",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
這裡你需要調整是"program",即你要調試程式在pc機上路徑
miDebuggerPath是pc上調試器,這裡我選gdb-multiarch
miDebuggerServerAddress 是ARM的IP和gdbserver端口,這裡是6666.
其餘無需改動。
完整的調試流程
首先在RV1126運作gdbserver
gdbserver :6666 ./track
:6666 表示在6666端口監聽,要與launch.json中的端口要一緻。
./track是被調試的程式,一運作就等待遠端的gdb接入
[root@RV1126_RV1109:/rktrack/bin]# gdbserver :6666 ./track
Process ./track created; pid = 919
Listening on port 6666
建立launch.json後,在vscode上左上角出現一個gdb的啟動項,點選綠色三角即可進入遠端調試,按正常會在main函數第一行停下, 在下面調試控制台會輸出gdb相應輸出。
如果是這樣表示整個環境建立成功。
在vscode正上方有傳統的調試按鈕(繼續,跳過,進入,跳出),在源碼左側可以點選設定斷點。
繼續運作可以看到在斷點停下來,并且在下方的調試控制也有相應資訊,甚至可以直接輸入gdb 指令
可以把光标移動到變量看到目前值,也能在右鍵菜單下添加監視在左側監視欄看到實時值
這個跟一般本地調試沒有差別。
這個調試器看起來無法直接調試應用程式帶的動态庫的源碼,這是gdb的問題。
希望這個文章能幫到你。