遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線,使用gdb標準程序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能,除錯stub是嵌入式系統中的一段**,作為宿主機gdb和目標機除錯程式間的乙個媒介而存在。
就目前而言,嵌入式linux系統中,主要有三種遠端除錯方法,分別適用於不同場合的除錯工作:用rom monitor除錯目標機程式、用kgdb除錯系統核心和用gdbserver除錯使用者空間程式,這三種除錯方法的區別主要在於,目標機遠端除錯stub 的存在形式的不同,而其設計思路和實現方法則是大致相同的。
#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
process /tmp/hello created: pid=80listening 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除錯
心得體會 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系統中,主要...