在海思晶片上使用GDB遠程調試

那隻斑馬還沒有睡 發佈 2022-07-01T11:53:38.710126+00:00

1 前言使用海思平台上(編譯工具鏈:arm-himix200-linux)交叉編譯 GDB 工具(使用版本8.2,之前用過10.

1 前言

使用海思平台上(編譯工具鏈:arm-himix200-Linux)交叉編譯 GDB 工具(使用版本8.2,之前用過10.2的版本,在編譯 gdbserver 遇到編譯出錯的問題,因為關聯了其他靜態庫等,嘗試解決,但是遇到了一些其他問題,因為時間問題折騰了一段時間就放棄使用10.2的版本了)。

通過使用 gdb+gdbserver 遠程調試目標板,之後就可以通過 VSCode 配置好後實現和 IDE 集成開發環境一樣的比較直觀方便調試。


2 編譯

2.1 前期準備

1)下載 gdb(網上很多,搜索就能下載,我選擇的是 gdb-8.2)

2)解壓縮,輸入指令解壓 tar -vxzf gdb-8.2.tar.gz

3)進入解壓後的目錄中 cd gdb-8.2

2.2 環境配置

2.2.1 編譯 gdb

1)配置生成 Makefile 文件

./configure --target=arm-himix200-linux --prefix=~/gdbTool

--target=arm-himix200-linux 意思是說目標平台是運行於ARM體系結構的linux內核;

--program-prefix=arm-himix200-linux 是指生成的可執行文件的前綴,比如 arm-himix200-linux-gdb(可選參數)

--prefix= 是指生成的可執行文件安裝在哪個目錄,這個目錄需要根據實際情況作選擇。如果該目錄不存在,會自動創建(當然,權限足夠的話)

2)編譯、安裝

make & make install

會在--prefix 指定的目錄下生成四個子目錄:bin、include、lib 和 share,我們需要的 arm-himix200-linux-gdb 就在其中的bin目錄下。

2.2.2 編譯 gdbserver

1)進入 gdbserver 目錄下(不同的版本路徑不一樣,比如 gdb-8.2 的路徑為 gdb-8.2/gdb/gdbserver,而 gdb-10.2 的路徑為 gdb-10.2/gdbserver),則指令為cd gdb/gdbserver

2)在 gdbserver 目錄下配置生成 Makefile 文件

./configure --host=arm-himix200-linux --prefix=~/gdbTool

--host=arm-himix200-linux 指定了生成可執行文件運行的平台和系統:運行於ARM平台的Linux系統

--prefix= 是指生成的可執行文件安裝在哪個目錄

3)編譯、安裝(會在--prefix 指定的目錄下生成 bin 目錄,gdbserver 就在 bin 目錄下)

make & make install

3 使用步驟

3.1 前期準備

將之前生成的 gdbserver 調試程序放在目標板上或者通過 nfs 方式運行也可以.這樣就可以用 gdb 和 gdbserve 遠程調用來調試目標板上的程序了。

一般情況 gdbserver 程序較大,所以建議採用 nfs 的方式掛載在目標板上運行較好,也可以通過 strip 減少 gdbserver 的大小(刪除程序中符號表、調試符號表信息等)

3.2 執行 gdbserver

在目標板上運行需要調試的程序,比如

./gdbserver --remote-debug 192.168.1.100:8005 test

192.168.1.100 為宿主機的 IP 地址; 8005 是用來作為 gdb 調試監聽的埠,可自行設置;test 是編譯好的目標操作程序

(為了更好地使用 gdb 的調試功能,在編譯目標板程序時需加入 -g 選項

3.3 執行 gdb

1、在宿主機上運行 gdb 程序

./arm-himix200-linux-gdb test

arm-himix200-linux-gdb 是編譯 gdb 生成安裝在 bin 目前錄下的文件,名稱可能因為設置了 --program-prefix 參數有所改變,test 是和目標板上的 test 一樣的程序文件

2、進入 gdb 調試狀態後,連接目標板

(gdb) target remote 192.168.1.102:8005

192.168.1.102 為目標板的 IP 地址,8005 則是 gdb 調試監聽的埠

3、連接成功後則開始運行,宿主機之後根據 gdb 指令設置斷點、單步調試等功能進行調試

(gdb) r

GDB常用的調試指令

GDB 調試器提供有大量的調試選項,可滿足大部分場景中調試代碼的需要。如表所示,羅列了幾個最常用的調試指令(包含指令縮寫)及各自的作用:

調試指令

作 用

(gdb) break xxx

(gdb) b xxx

在原始碼指定的某一行設置斷點,其中 xxx 用於指定具體打斷點的位置。

(gdb) run

(gdb) r

執行被調試的程序,其會自動在第一個斷點處暫停執行。

(gdb) continue

(gdb) c

當程序在某一斷點處停止運行後,使用該指令可以繼續執行,直至遇到下一個斷點或者程序結束。

(gdb) next

(gdb) n

令程序一行代碼一行代碼的執行。

(gdb) print xxx

(gdb) p xxx

列印指定變量的值,其中 xxx 指的就是某一變量名。

(gdb) list

(gdb) l

顯示源程序代碼的內容,包括各行代碼所在的行號。

(gdb) quit

(gdb) q

終止調試。

如果本文對你有幫助,別忘記給我個3連 ,點讚,轉發,評論,,咱們下期見。

收藏 等於白嫖,點讚才是真情。




原文 https://www.cnblogs.com/const-zpc/p/16364427.html

關鍵字: