天天看點

VSCode 建構通過gdbserver網絡遠端調試ARM程式圖形調試界面

作者:軟核改造祝融叔

但是很多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檔案"

VSCode 建構通過gdbserver網絡遠端調試ARM程式圖形調試界面

通常會提供一個模闆給你改寫,但我隻有兩行,是以直接拷貝進去如下模闆

{
    // 使用 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 建構通過gdbserver網絡遠端調試ARM程式圖形調試界面

在vscode正上方有傳統的調試按鈕(繼續,跳過,進入,跳出),在源碼左側可以點選設定斷點。

VSCode 建構通過gdbserver網絡遠端調試ARM程式圖形調試界面

繼續運作可以看到在斷點停下來,并且在下方的調試控制也有相應資訊,甚至可以直接輸入gdb 指令

VSCode 建構通過gdbserver網絡遠端調試ARM程式圖形調試界面

可以把光标移動到變量看到目前值,也能在右鍵菜單下添加監視在左側監視欄看到實時值

這個跟一般本地調試沒有差別。

VSCode 建構通過gdbserver網絡遠端調試ARM程式圖形調試界面

這個調試器看起來無法直接調試應用程式帶的動态庫的源碼,這是gdb的問題。

希望這個文章能幫到你。

繼續閱讀