嵌入式Linux系統的GDB遠端除錯的實現

2021-04-12 18:12:36 字數 2039 閱讀 8521

遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線。使用 gdb標準程序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段**,作為宿主機gdb和目標機 除錯程式間的乙個媒介而存在。

就目前而言,嵌入式linux系統中,主要有三種遠端除錯方法,分別適用於不同場合的除錯工 作:用rom monitor除錯目標機程式、用kgdb除錯系統核心和用gdbserver除錯使用者空間程式。這三種除錯方法的區別主要在於,目標機遠端除錯stub 的存在形式的不同,而其設計思路和實現方法則是大致相同的。

而我們最常用的是除錯應用程式。就是採用gdb+gdbserver的方式進行除錯。在很多 情況下,使用者需要對乙個應用程式進行反覆除錯,特別是複雜的程式。採用gdb方法除錯,由於嵌入式系統資源有限性,一般不能直接在目標系統上進行除錯,通 常採用gdb+gdbserver的方式進行除錯。 gdbserver在目標系統中執行,gdb則在宿主機上執行。

#tar jxvf gdb-6.4-tar-bz2

#cd gdb-6.4

#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v

#make

這一步的時候可能會有問題,提示乙個函式中(具體函式名不記得了)parse error,就是unsigned前邊多了乙個」}」,你用vi進入那一行把它刪掉就行了。

#make install

#export path=$path:/usr/local/arm-gdb

進入gdbserver目錄:

#./configure --target=arm-linux –host=arm-linux

#make cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc

(這一步要指定arm-linux-gcc的位置)

沒有錯誤的話就在gdbserver目錄下生成gdbserver可執行檔案,把它燒寫到flash的根檔案系統分割槽,或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上執行就行。

下面就可以用gdb+gdbserver除錯我們開發板上的程式了。在目標板上執行 gdbserver,其實就是在宿主機的minicom下,我的redhat linux裝在vmware下的。我是在minicom下#mount 192.168.2.100:/ /tmp後做的(這裡引數-o nolock可以不加,不加這一步執行得反而更快些),hello和gdbserver都是位於linux根目錄下,把主機根目錄掛在到開發板的/tmp 目錄下。

要進行gdb除錯,首先要在目標系統上啟動gdbserver服務。在gdbserver所在目錄下輸入命令:

(minicom下)

#cd /tmp

#./gdbserver 192.168.2.100:2345 hello

192.168.2.100為宿主機ip,在目標系統的2345埠開啟了乙個除錯程序,hello為要除錯的程式。

process /tmp/hello created: pid=80

listening on port 2345

(另乙個終端下)

#cd /

#export path=$path:/usr/local/arm-gdb/bin

#arm-linux-gdb hello

(gdb) target remote 192.168.2.223:2345

(192.168.2.223為開發板ip)

remote debugging using 192.168.2.223:2345

[new thread 80]

[switching to thread 80]

0x40002a90 in ??()

remote debugging from host 192.168.2.100

(gdb)

連線成功,這時候就可以輸入各種gdb命令如list、run、next、step、break等進行程式除錯了。

嵌入式系統 GDB除錯

心得體會 gdb gdb全稱 gnu debugger,是gnu工程為gnu作業系統開發的偵錯程式。它可以用於除錯c c objective c pascal ada等語言編寫的程式。被除錯的程式可以跟gdb執行於同一臺電腦,也可執行於不同電腦。file 裝入想要除錯的可執行檔案 kill 終止正在...

嵌入式的gdb除錯

在開發過程中有很多問題如果用gdb進行除錯跟蹤會大大提高效率,但是我發現不少同事對於gdb除錯概念比較模糊,特別是跨平台的除錯,以至於放棄用gdb除錯而影響排除bug的效率。因此我這裡主要對跨平台除錯做乙個簡要的說明。我們對機頂盒上的軟體進行除錯主要有兩種方式,本地除錯和遠端除錯。遠端除錯還有乙個問...

嵌入式Linux系統的GDB遠端除錯的實現

遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線,使用gdb標準程序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能,除錯stub是嵌入式系統中的一段 作為宿主機gdb和目標機除錯程式間的乙個媒介而存在。就目前而言,嵌入式linux系統中,主要有三...