在嵌入式開發領域,除錯是確保程式穩定運作的關鍵步驟。對於使用OKMX8MP-C開發板的開發者來說,掌握GDB遠端調試技術可以顯著提升開發效率。 GDB是The GNU Project Debugger的縮寫,是Linux下的綜合偵錯工具。 GDB支援多種偵錯方式,包括設定斷點、單步執行、列印變數、觀察變數、檢查暫存器、檢視呼叫堆疊。
在Linux環境軟體開發中,GDB是用於偵錯C和C程式的主要偵錯工具。 OKMX8MP-C的5.4.70版本預設支援gdbserver,我們提供的開發環境也預設支援gdb。接下來詳細介紹如何在OKMX8MP-C上進行GDB遠端偵錯
forlinx@ubuntu:~$ $CC -g test_bug.c -o test_bug
此指令將編譯 test_bug.c 原始檔並產生包含偵錯資訊的執行檔 test_bug。這樣GDB在後續的調試過程中就可以準確定位到原始碼中對應的位置。
編譯完成後,需要將產生的可執行檔複製到開發板上。這通常是透過串行埠、網路或其他文件傳輸方法來實現的。在本例中,我們假設test_bug檔案已複製到開發板上的/目錄下。
設定IP位址:
使用ifconfig指令設定開發板的IP位址。例如:
ifconfig eth0 172.16.0.109
這裡,開發板的IP位址設定為172.16.0.109
在開發板上啟動gdbserver,指定監聽連接埠號碼和要偵錯的程式。例如:
gdbserver 172.16.0.109:2345 /test_bug
此指令將啟動 gdbserver 並在連接埠 2345 上偵聽來自 GDB 用戶端的連線要求。
root@OK8MP:~# ifconfig eth0 172.16.0.109
root@OK8MP:~# gdbserver 172.16.0.109:2345 test_bug
進程 /home/root/test_bug 建立; pid = 1356
監聽埠 2345
在虛擬機器或主機上設定與開發板同一網段的IP位址,並使用ping指令測試與開發板的連通性
確保能ping通開發板IP位址,這是遠端偵錯的前提。
在虛擬機器或主機上,使用aarch64-poky-linux-gdb指令啟動GDB客戶端並指定要偵錯的程式。例如:
forlinx@ubuntu:~/ aarch64-poky-linux-gdb test_bug
GNU gdb (GDB) 8.3.1
版權所有 (C) 2019 自由軟體基金會
授權 GPLv3 :GNU GPL 版本 3 或更高版本 http://gnu.org/licenses/gpl.html
這是免費軟體:您可以自由更改和重新分發它。
在法律允許的範圍內,不提供任何保證。
輸入“顯示複製”和“顯示保固”以了解詳細資訊。該 GDB 配置為「--host=x86_64-pokysdk-linux --target=aarch64-poky-linux」。
鍵入“顯示配置”以取得配置詳細資訊。
有關錯誤報告說明,請參閱:
http://www.gnu.org/software/gdb/bugs/
在線查找 GDB 手冊和其他文件資源:
http://www.gnu.org/software/gdb/documentation/
如需協助,請輸入「協助」。
輸入「apropos word」來搜尋與「word」相關的指令...
從 test_bug 讀取符號...
(gdb)
連接到開發板:
在GDB客戶端中,使用target遠端指令連接板子上的gdbserver。例如:
(gdb) 目標遠端 172.16.0.109:2345
使用 172.16.0.109:2345 進行遠端除錯
從遠端目標讀取 /lib/ld-linux-aarch64.so.1...
警告:從遠端目標傳輸檔案可能會很慢。使用“set sysroot”來本地存取檔案。
從遠端目標讀取 /lib/ld-linux-aarch64.so.1...
從目標讀取符號:/lib/ld-linux-aarch64.so.1...
從遠端目標讀取 /lib/ld-2.30.so...
從遠端目標讀取 /lib/.debug/ld-2.30.so...
從遠端目標讀取 /lib/.debug/ld-2.30.so...
從目標讀取符號:/lib/.debug/ld-2.30.so...
0x0000fffff7fcf080 in _start () from target:/lib/ld-linux-aarch64.so.1
(gdb)
至此,GDB客戶端連接到板上的gdbserver,準備開始遠端偵錯。
l(列表):列出原始碼。
b(中斷):設定斷點。
n(下一個):逐行執行程式碼。
s(步驟):進入函數以逐行執行。
c(繼續):繼續執行程式。
p(列印):列印變數的值。
例如使用l指令查看目前位置的來源碼:
(gdb) l
12 }
13
14 void A(int *p)
15 {
16 B(p);
17 }
18
19 void A2(int *p)
20 {
21 C(p);
(gdb)
然後,可以使用B指令在一行上設定斷點,例如第16行:
bash複製程式碼
(gdb) b 16
斷點 1 位於 0x...:檔案 test_bug.c,第 16 行。
使用c指令繼續執行程式。程式會在斷點處暫停,等待進一步的調試。
變數監控:使用watch指令監控變數變化。當變數的值發生變化時,GDB會自動暫停執行。
多執行緒偵錯:如果程式是多執行緒的,可以使用thread指令切換執行緒進行偵錯。
安全注意事項:在遠端偵錯過程中,確保網路環境安全至關重要。使用SSH隧道或其他加密方法來保護偵錯資料傳輸。
OKMX8MP-C GDB遠端偵錯技巧就這些了。這個強大的工具可以實現高效的問題解決和開發增強。
以上是OKMX-C GDB遠端偵錯技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!