Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1970875
  • 博文数量: 185
  • 博客积分: 10707
  • 博客等级: 上将
  • 技术积分: 1777
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-19 17:31
文章分类

全部博文(185)

文章存档

2014年(1)

2012年(6)

2011年(27)

2010年(13)

2009年(75)

2008年(63)

分类: LINUX

2008-11-13 20:50:58

寫這篇文章時突然想起一位很久不見的朋友,他是我工作第一年的夥伴,這位好友令我印象最深刻的是他使用GDB的技巧,那時是我第一次看到process可以 被attach,signal可以被攔截...等諸如此類的特技表演,我那位朋友對gdb的熟練度可能比吃飯還高,也多虧他的幫忙,讓我瞭解除了 printf以外的其它debug好招

這篇文章主要是示範如何進行遠端除錯,所以請先下載最新版的,我的實驗板是QT2410,toolchain為ELDK(ELDK有內建gdbtui),下載解壓縮完後,請執行下面的shell script,讓編出來的gdb可以support ARM架構,--enable-tui是讓GDB編出圖形化UI debug界面

  1. #! /bin/sh 
  2. ./configure --target=arm-linux \
  3. --prefix=/usr/local/eldk/armgdb \
  4. --exec-prefix=/usr/local/eldk/armgdb \
  5. --enable-tui

編譯完後請到gdb/gdbserver資料夾下執行下面的shell script並編譯

  1. #! /bin/sh 
  2.  
  3. export PATH=$PATH:/usr/local/eldk/usr/bin/
  4. export CPPFLAGS="-I/usr/local/eldk/arm/usr/include" 
  5. export LDFLAGS="" 
  6. export CFLAGS="" 
  7. export AR=arm-linux-ar 
  8. export AS=arm-linux-as 
  9. export LD=arm-linux-ld 
  10. export RANLIB=arm-linux-ranlib 
  11. export CC=arm-linux-gcc 
  12. export NM=arm-linux-nm 
  13. export ARCH=arm 
  14.  
  15. ./configure --target=arm-linux \
  16. --host=arm-linux \
  17. --build=arm-linux-gnu \
  18. --prefix=/usr/local/eldk/armgdb \
  19. --exec-prefix=/usr/local/eldk/armgdb \

這樣子我們可以得到一個可在2410上執行的gdbserver

先寫個簡單的小程式並編譯它(for example:arm-linux-gcc –ggdb –o hello hello.c),把測試程式丟到板子上再鍵入指令gdbserver 192.168.15.1:12345 hello,你會看到如下gdbserver啟動的畫面

在host端開啟我們編譯出來的gdbtui,可看到如下畫面,並輸入以下指令
(1)target remote 192.168.15.1:12345(連接遠端的gdbserver)
(2) continue到第一個中斷點時set solib-search-path /usr/local/eldk/arm/lib/(設定動態連結庫的位置),因為gdb預設的share library位置與target board相同,所以導致GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code.

詳細的gdbserver與gdb用法請參考

阅读(1621) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~