用ROM Monitor調試目標機程序
用KGDB調試系統內核
用gdbserver調試用戶空間程序。
這三種調試方法的區別主要在於:目標機遠程調試stub的存在形式的不同,而其設計思路和實現方法則是大致相同的,而我們最常用的是調試應用程序,就是采用gdb+gdbserver的方式進行調試。在很多情況下,用戶需要對一個應用程序進行反復調試,特別是復雜的程序,采用GDB方法調試,由於嵌入式系統資源有限性,一般不能直接在目標系統上進行調試,通常采gdb+gdbserver的方式進行調試。Gdbserver在目標系統中運行,gdb則在宿主機上運行。
要進行GDB調試,目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序,一般linux發行版中都有一個可以運行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠程調試,而要獲取gdb的源代碼包,針對arm平台作一個簡單配置,重新編譯得到相應gdb。
gdb的源代碼包可以從http://ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,最新版本為gdb-7.3,或者從以下地址下載:
下載在Linux公社的1號FTP服務器裡,下載地址:
FTP地址:ftp://www.linuxidc.com
用戶名:www.linuxidc.com
密碼:www.muu.cc
在 2011年LinuxIDC.com\10月\嵌入式Linux的GDB遠程調試的實現
下載方法見 http://www.linuxidc.net/thread-1187-1-1.html
一.編譯安裝arm-linux-gdb
<1>#tar jxvf gdb-7.3.tar.bz2
<2>#cd gdb-7.3
<3>#./configure--target=arm-linux --enable-sim --prefix=/usr/local/bin
<4>#make
<5>#make install
二.編譯安裝gdbserver
<1>#cd gdb-7.3/gdb/gdbserver
<2>#./configure --target=arm-linux--host=arm-linux
<3>#make
這樣在gdb-7.3/gdb/gdbserver目錄下就生成了一個gdbserver可執行文件,拷貝到目標開發板上.
三.測試arm-linux-gdb + gdbserver
<1>在超級終端輸入:
#./gdbserver 192.168.100.1:2345 hello
[192.168.100.1為pc機ip地址,2345為監聽端口,hello為待調試程序
這樣在開發板上可以看到如下提示信息:
Process wpa_cli created; pid = 730
Listening on port 2345
表示gdbserver 成功運行等待客戶端的連接信息
<2>在pc機上輸入:
#arm-linux-gdb hello
然後在GDB界面輸入:
#target remote 192.168.100.2:2345
[192.168.100.2為開發板ip地址,2345為開發版監聽端口]
這樣在開發板上可以看到如下提示信息:
Remote debugging from host 192.168.100.1
表示gdbserver成功運行並且建立連接關系,等待客戶端的調試信息
四、(arm-linux-gdb+ gdbserver) 具體實例:
pc端使用arm-linux-gdb 或 arm-linux-gdbtui簡易圖形gdb終端
〈1〉PC端:
#arm-linux-gdb hello //字符界面調試環境
例:
(gdb) b main
Breakpoint1 at 0x835c: file hello.c,line 6.
(gdb) l
字符界面:根PC本地GDB一樣,用起來挺費勁的,呵呵
#arm-linux-gdbtui hello //簡易圖形界面調試環境
簡易圖形界面:用起來還是比較方便的,呵呵
(gdb) c不要輸入r,輸入c,因為target端的hello在載入時處於了run狀態.
Continuing.
Breakpoint 1, main (argc=1,argv=0xbeb4ad84) at hello.c:6
6 for(i = 0;i < 10;i++)
(gdb) n
8 printf("%d\n", i);
(gdb) n
6 for(i = 0;i < 10;i++)
(gdb) n
8 printf("%d\n",i);
(gdb)
<2> target板端log信息
====================================================================================
/ # ./gdbserver 192.168.100.1:2345 hello
[ 3688.476398] init: untracked pid 1513 exited
Process hello created; pid = 1514
Listening on port 2345
Remote debugging from host 192.168.100.1
====================================================================================