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

2021-06-25 13:27:49 字數 2182 閱讀 5363

嵌入式linux的gdb遠端除錯的實現

author: vicky

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

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

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

要進行gdb除錯,目標系統必須包括gdbserver程式,宿主機也必須安裝gdb程式。一般linux發行版中都有乙個可以執行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠端除錯,而要獲取gdb的源**包,針對arm平台作乙個簡單配置,重新編譯得到相應gdb。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下,我的red hat 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等進行程式除錯了。

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

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

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

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

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

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