请选择 进入手机版 | 继续访问电脑版

北南南北论坛

 找回密码
 立即注册
查看: 36|回复: 0

ARM板上构造gdb +gdbserver调试环境

[复制链接]

549

主题

929

帖子

2630

积分

金牌会员

Rank: 6Rank: 6

积分
2630
发表于 2017-12-13 10:47:11 | 显示全部楼层 |阅读模式
远程调试环境由宿主机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
  1. download  from  <a href="http://cygwin.mirrors.pair.com/gdb/old-releases/" target="_blank" class="gj_safe_a" style="color: rgb(51, 102, 153);">http://cygwin.mirrors.pair.com/gdb/old-releases/</a>
  2. $ tar jxf gdb-5.2.1.tar.bz2
  3. $ cd gdb-5.2.1
  4. $ mkdir obj
  5. $ cd obj
  6. ../configure --target=armv4l-unknown-linux \
  7.         --enable-shared --prefix=/tmp/g \
  8.         --without-x --disable-gdbtk --disable-tui \
  9.         --without-included-regex --without-included-gettext
  10. $ make
  11. $ make install
  12. $ mkdir gdb/gdbserver  
  13. $ cd gdb/gdbserver
  14. $ chmod +x ../../../gdb/gdbserver/configure
  15. $ CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc \
  16.         ../../../gdb/gdbserver/configure armv4l-unknown-linux \
  17.         --without-included-regex --without-included-gettext
  18. $ make
  19. $ cp -vf gdbreplay gdbserver /tmp/g/bin
复制代码
2.remote debugging

  1. cp  gdbserver from  host  to  target machine

  2. target machine
  3.         gdbserver 59.69.74.87:2345 hello
复制代码

   
出现
Process hello created; pid = 68

  1. host
  2.         /tmp/g/bin/armv4l-unknown-linux-gdb hello
  3.        (gdb) b main
  4.        (gdb) target remote 203.239.30.207:2345
  5.       出现 Remote debugging using 59.69.75.186:2345
  6.            0x40002a00 in ?? ()

  7.        (gdb) c  //相当于主机gdb的run命令
复制代码
此时目标机上出现
  1. Remote debugging from host 59.69.74.87
  2. hello,world
复制代码
连接成功后,这时候就可以输入各种gdb命令如list、run、next、step、break等进行程序调试了。
调试结束出现                                                                                
  1. Child exited with retcode = 0
  2.                                                                                 
  3. Child exited with status 236
  4. GDBserver exiting
复制代码
说明:  
1)目标机上的被调试程序hello, 与主机上的程序hello, 是相同的程序, 但位置不一样,并非是用网络共享的同一个位置的同一个文件, 一个在目标机上 ,一个在主机上, 没有关系.
2) host ip  : 59.69.74.87
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


手机版|北南南北论坛  

GMT+8, 2018-1-17 19:16 , Processed in 0.071970 second(s), 29 queries .

© 2001-2016 VxWorks6 Inc.

快速回复 返回顶部 返回列表