1. 程式人生 > >gdb和gdbserver的安裝和使用

gdb和gdbserver的安裝和使用

一、    遠端除錯環境由宿主機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:如果放到了/home/cby目錄:
#cd /home/cby
#tar zxvf gdb-6.6.tar.gz
#cd gdb-6.6
#./configure --target=arm-linux --prefix=/home/cby/arm-gdb
#make
#make install
然後建立gdbserver:
#mkdir /home/cby/gdbserver
#cd ../gdbserver
#chmod +x /home/cby/gdb-6.6/gdb/gdbserver/configure
#CC=arm-linux-gcc ../gdb-6.6/gdb/gdbserver/configure /
--host=arm-linux  --prefix=/home/cby/gdbserver
#make
#make install
#arm-linux-strip gdbserver
#cp gdbserver /tftpboot

二、除錯步驟
1、交叉編譯,帶引數-gstabs 或 -g 加入除錯資訊。
假設要除錯的程式為hello.c。
#arm-linux-gcc -g hello.c -o hello
2、在Target Board開啟gdbserver
#gdbserver  <host-ip>:2345 hello   (我的host-ip是192.168.0.178)
gdbserver開始監聽2345埠(你也可以設其他的值),然後啟動hello,你會看到“Process test created:pid=88”
3、回到Host端
#export PATH=$PATH:/home/cby/arm-gdb/bin(arm-linux-gdb的路徑)
#arm-linux-gdb hello
最後一行顯示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”...
說明此gdb在X86的Host上執行,但是除錯目標是ARM程式碼。
(gdb)target remote <target-board-ip>:2345    (我的target-board-ip is 192.168.0.177)
注意:你的埠號必須與gdbserver開啟的埠號一致,這樣才能進行通訊。
建立連結後,就可以進行除錯了。除錯在Host端,跟gdb除錯方法相同。注意的是要用“c”來執行命令,不能用“r”。因為程式已經在Target Board上面由gdbserver啟動了。結果輸出是在Target Board端,用超級終端檢視。