遠端除錯環境由宿主機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。
一、編譯過程
3. 進入gdb-6.6/gdb/gdbserver目錄,編譯gdbserver:
#./configure --target=arm-linux –host=arm-linux
#make cc=/usr/local/arm/3.4.1/bin/arm-linux-gcc
4. 沒有錯誤的話就在gdbserver目錄下生成gdbserver可執行檔案,把它燒寫到flash的根檔案系統分割槽,或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上執行就行。
二、除錯過程
下面就可以用gdb+gdbserver除錯我們開發板上的程式了。
1、交叉編譯目標程式,帶引數-g加入除錯資訊。
假設要除錯的程式為test.c。
#arm-linux-gcc -g test.c -o test
2、在target board開啟gdbserver
#./gdbserver 138.198.177.65:2345 mke2fs /dev/stnftl0 64
gdbserver開始監聽2345埠(你也可以設其他的值),然後啟動test,你會看到「process test created:pid=88」
3、回到host端test所在的目錄下
#export path=$path:/usr/local/arm-gdb/bin
#arm-linux-gdb mke2fs
最後一行顯示:this gdb was configured as 「--host=i686-pc-linux-gnu,--target=arm-linux」...
說明此gdb在x86的host上執行,但是除錯目標是arm**。
#(gdb)target remote 138.198.177.250:2345
注意:你的埠號必須與gdbserver開啟的埠號一致,這樣才能進行通訊。
remote debugging using 138.198.177.250:2345
0x40000dd0 in ?? () from /lib/ld-linux.so.2
remote debugging from host 192.168.2.100
4、建立鏈結後,就可以進行除錯了。除錯在host端,跟gdb除錯方法相同,如list、run、next、step、break等。注意的是要用「c」來執行命令,不能用「r」。因為程式已經在target board上面由gdbserver啟動了。結果輸出是在target board端,用超級終端檢視。
嵌入式Linux的GDB遠端除錯的實現
遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線。使用gdb標準遠端序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段 作為宿主機gdb和目標機除錯程式間的乙個媒介而存在。就目前而言,嵌入式linux系統中,主要有...
嵌入式Linux的GDB遠端除錯的實現
嵌入式linux的gdb遠端除錯的實現 author vicky 遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線。使用gdb標準遠端序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段 作為宿主機gdb和目標機除錯...
嵌入式Linux系統的GDB遠端除錯的實現
遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線。使用 gdb標準程序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段 作為宿主機gdb和目標機 除錯程式間的乙個媒介而存在。就目前而言,嵌入式linux系統中,主要...