GDB+GdbServer

GDB+GdbServer: ARM程序调试

注:标红处为输入命令

内容摘要

    远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。 就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机远程调试stub 的存在形式的不同,而其设计思路和实现方法则是大致相同的。 而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。

gdb+gdbserver方式进行ARM程序调试

gdb+gdbserver总体介绍

    远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。
源代码下载
嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。这样,应用程序在嵌入式目标系统上运行,而gdb调试在Host端,所以要采用远程调试(remote)的方法。进行GDB调试,目标系统必须包括gdbserver程序(在主机上正对硬件平台编译成功后下载到目标机上),宿主机也必须安装GDB 程序。一般Linux发行版中都有一个可以运行的GDB,但开发人员不能直接使用该发行版中的GDB来做远程调试,而要获取GDB的源代码包,针对arm 平台作一个简单配置,重新编译得到相应GDB。源代码包下载:
http://ftp.gnu.org/gnu/gdb/

本次下载7.5:

  • PC平台编译安装
./configure --target=arm-linux  --disable-werror  \  --prefix=/usr/local/arm-gdb -v(--target配置gdb的目标平台,--prefix配置安装路径,当然其他路径也可以, .跟下面配置一致即可,须在环境变量中声明,启动arm-linux-gdb需要,可更改/etc/profile或/etc/profile,添加export PATH=$PATH:/usr/local/arm-gdb/bin,这样可以找到路径)
make
make install(生成arm-linux-gdb,并存入/usr/local/arm-gdb /bin/)
  • ARM交叉编译安装
./configure --target=arm-linux --host=arm-linux(--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb,不需要配置—prefix,因为gdbserver不在主机端安装运行)

源码中有点错误需要修改:
linux-arm-low.c文件注释掉“#include <sys/reg.h>”

make  \ CC=/opt/Xilinx/SDK/2015.4/gnu/arm/lin/bin/arm-xilinx-linux-gnueabi-gcc (要指定交叉编译器的绝对路径,相对路径不能正常编译)

在gdbserver目录下生成gdbserver可执行文件,
修改其属性:
    chmod 777 gdbserver
    使用arm-linux-strip命令处理一下gdbserver,将多余的符号信息删除,可让elf文件更精简,通常在应用程序的最后发布时使用;
    把它烧写到flash的根文件系统分区的/usr/bin(在此目录下,系统可以自动找到应用程序,否则必须到gdbserver所在目录下运行之),或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。
  • 串口调试
如果你用串口1调试hello的话,你就要现在板子上运行命令:
gdbserver test /dev/ttyPS0 (详情可以参考gdbserver目录下的readme文件)
这时gdbserver就在等待gdb的应答信号了。
然后在pc机上运行命令:
    arm-linux-gdb test
在xxx-linux-gdb里敲入入下命令:
    1、tty /dev/ttyUSB0(这里设置串口ttyUSB0)
    #老版本为 set remotedevice /dev/ttyUSB0
    2、set remote baud 115200 (这里设置串口波特率)
    3、set debug remote 1(可选)
    4、target remote /dev/ttyUSB0
文章作者: 孙毅鹏
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 孙毅鹏个人博客
嵌入式Linux
喜欢就支持一下吧