|
ARM板上構造gdb +gdbserver調試環境
|
|
| S3C2410 ARM板上構造gdb +gdbserver調試環境
遠程調試環境由宿主機gdb和目標機調試stub共同構成,兩者通過串口或TCP連接。使用GDB標準程串行協議協同工作,實現對目標機上的系統內核和上層應用的監控和調試功能。調試stub是嵌入式系統中的一段代碼,作為宿主機GDB和目標機調試程序間的一個媒介而存在。
就目前而言,嵌入式Linux系統中,主要有三種遠程調試方法,分別適用于不同場合的調試工作:
用ROMMonitor調試目標機程序、
用KGDB調試系統內核
用gdbserver調試用戶空間程序。
這三種調試方法的區別主要在于,目標機遠程調試stub的存在形式的不同,而其設計思路和實現方法則是大致相同的。
而我們最常用的是調試應用程序。就是采用gdb+gdbserver的方式進行調試。在很多情況下,用戶需要對一個應用程序進行反復調試,特別是復雜的程序。采用GDB方法調試,由于嵌入式系統資源有限性,一般不能直接在目標系統上進行調試,通常采用gdb+gdbserver的方式進行調試。Gdbserver在目標系統中運行,gdb則在宿主機上運行。
目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序。一般linux發行版中都有一個可以運行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠程調試,而要獲取gdb的源代碼包,針對arm平臺作一個簡單配置,重新編譯得到相應gdb如armv4l-unknown-linux-gdb 。
1.source compile
download from http://cygwin.mirrors.pair.com/gdb/old-releases/
$ tar jxf gdb-5.2.1.tar.bz2
$ cd gdb-5.2.1
$ mkdir obj
$ cd obj
../configure --target=armv4l-unknown-linux \
--enable-shared --prefix=/tmp/g \
--without-x --disable-gdbtk --disable-tui \
--without-included-regex --without-included-gettext
$ make
$ make install
$ mkdir gdb/gdbserver
$ cd gdb/gdbserver
$ chmod +x ../../../gdb/gdbserver/configure
$ CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc \
../../../gdb/gdbserver/configure armv4l-unknown-linux \
--without-included-regex --without-included-gettext
$ make
$ cp -vf gdbreplay gdbserver /tmp/g/bin
2.remote debugging
o cp gdbserver from host to target machine
o target machine
gdbserver 59.69.74.87:2345 hello
出現
Process hello created; pid = 68
o host
/tmp/g/bin/armv4l-unknown-linux-gdb hello
(gdb) b main
(gdb) target remote 203.239.30.207:2345
出現 Remote debugging using 59.69.75.186:2345
0x40002a00 in ?? ()
(gdb) c //相當于主機gdb的run命令
此時目標機上出現
Remote debugging from host 59.69.74.87
hello,world
連接成功后,這時候就可以輸入各種gdb命令如list、run、next、step、break等進行程序調試了。
調試結束出現
Child exited with retcode = 0
Child exited with status 236
GDBserver exiting
說明:
1)目標機上的被調試程序hello, 與主機上的程序hello, 是相同的程序, 但位置不一樣,并非是用網絡共享的同一個位置的同一個文件, 一個在目標機上 ,一個在主機上, 沒有關系.
2) host ip : 59.69.74.87
target 2410 ip is 59.69.75.186
都是局域網ip.
|
|
|
|