|
一.下載gdb-6.4.tar.gz源代碼 http://ftp.gnu.org/gnu/gdb/ 二.編譯 GDB #tar zxvf gdb-6.4.tar.gz 2.1 編譯GDB Server #cd gdb-6.4 #./configure --target=arm-linux --prefix=/usr/local/arm-gdb #make 注意: 這里如果你用的是gcc-4.3.2的話,編譯可能會(huì)出錯(cuò)!你可以改成 gcc-4.1 就可以順利編譯通過(guò) 編譯ARM用的GDB時(shí)出現(xiàn)error: no termcap library found錯(cuò)誤的解決方法2009年03月28日 星期六 21:55在Ubuntu下編譯gdb時(shí)出現(xiàn)如下錯(cuò)誤: ........ checking for library containing gethostbyname... none required checking for library containing socketpair... none required checking for library containing waddstr... no checking for library containing dlgetmodinfo... no checking for library containing tgetent... no configure: error: no termcap library found make[1]: *** [configure-gdb] 錯(cuò)誤 1 解決方法:sudo apt-get install libncurses5-dev 安裝完后,在make就OK了! #make install // 生成/usr/local/arm-gdb/bin 2.2 編譯GDB Client #cd ./gdb/gdbserver #export PATH=$PATH:/usr/local/arm-gdb/bin #./configure --target=arm-linux --host=arm-linux #vi config.h //#define HAVA_SYS_REG_H //注釋此句 #make CC=arm-softfloat-linux-gnu-gcc //編譯用于目標(biāo)機(jī)的stub程序 生成gdbserver是GDB客戶端程序,在板子上運(yùn)行。 三.實(shí)戰(zhàn)調(diào)試 1.編輯文件 # vi gdbtest.c 1 #include <stdio.h> 2 3 int 4 func(int n){ 5 int sum=0, i; 6 for (i=0; i<n; i++){ 7 sum += i; 8 } 9 return sum; 10 } 11 12 int 13 main(void) 14 { 15 int i; 16 long result = 0; 17 for (i=0; i<=100; i++){ 18 result += i; 19 } 20 21 printf("result[1-100] = %d \n", result); 22 printf("resutl[1-225] = %d \n", func(255)); 23 24 return 0; 25 } # arm-linux-gcc -g gdbtest.c -o gdbtest // 交叉編譯 2.下載文件到目標(biāo)板: gdbtest和gdbserver 假設(shè) host pc ip:192.168.1.45 board ip:192.168.1.180 將文件拷貝到目標(biāo)板上: 先將gdbtest和gdbserver兩個(gè)文件拷貝到主機(jī)的/tftpboot目錄下 在目標(biāo)板的Linux中運(yùn)行: #mount 192.168.1.108:/tftpboot /mnt/nfs #cd /mnt/nfs #ls 看是否有g(shù)dbtest和gdbserver兩個(gè)文件。 3.運(yùn)行調(diào)試 client board: #./gdbserver 192.168.1.45:1234 gdbtest // 目標(biāo)板上運(yùn)行g(shù)dbtest 監(jiān)聽(tīng)端口1234 host pc: #cd /usr/local/arm-gdb/bin/ #copy gdbtest /usr/local/arm-gdb/bin/ // 將前面編譯的文件gdbtest拷貝到此目錄 #./arm-linux-gdb gdbtest (gdb)target remote 192.168.1.180:1234 // 連接到開(kāi)發(fā)板 成功后就可以進(jìn)行調(diào)試 (gdb)list or l (gdb)break func (gdb)break 22 (gdb)info br (gdb)continue or c // 這里不能用 run (gdb)next or n (gdb)print or p result (gdb) finish // 跳出func函數(shù) (gdb) next (gdb) quit 建立連接后進(jìn)行g(shù)db遠(yuǎn)程調(diào)試和gdb本地調(diào)試方法相同。 |