配置GDB+GdbServer远程调试环境

1、本文概述及前期准备工作:

开发板和宿主机需要使用网线联机调试,宿主机运行GDB,目标板运行GDBServer。

宿主机内核版本:Linux 2.6

目标板平台:arm-linux

交叉编译链:arm-linux-gcc

  Gdb版本:Gdb 7.4

2、Gdb,GdbServer介绍:

gdb介绍:参见维基百科:http://zh.wikipedia.org/wiki/GDB

gdbserver:http://en.wikipedia.org/wiki/Gdbserver

3、宿主机如何配置GDB:

3.1、下载: http://ftp.gnu.org/gnu/gdb/ 选择相应的GDB版本
3.2、解压:tar jxvf gdb-7.4.tar.bz2
3.3、进入到解压目录:cd gdb-7.4/
        #./configure --target=arm-linux --prefix=/usr/local/arm-gdb –v
其中--target是gdb目标平台,--perfix用来指明安装路径,安装完成之后,可以将此路径加入到环境变量中:
进入./bashrc,添加语句export PATH=$PATH:/usr/local/arm-gdb/bin,即可直接使用。
#make
#make install
即在刚才指明的安装路径/usr/local/arm-gdb/bin中生成arm-linux-gdb工具

4、目标板安装配置GDBserver:

    目标板使用的GDBSServer需要交叉编译,我所使用的目标板平台为 arm-linux;

4.1  首先进入 gdb目录下的gdbserver目录中,即:cd gdb/gdbserver/

4.2  在此目录下,配置  ./configure --target=arm-linux --host=arm-linux  

--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb

       #make CC=arm-linux-gcc 由于我这里已经将交叉编译链目录添加到环境变量中,如果出现arm-linux-gcc not found 请使用绝对路径指明交叉编译工具链的位置;

但是这里可能会遇到一个错误,错误的信息如下:

linux-arm-low.c: In function `arm_stopped_by_watchpoint':
linux-arm-low.c:642: error: `PTRACE_GETSIGINFO' undeclared (first use in this function)
linux-arm-low.c:642: error: (Each undeclared identifier is reported only once
linux-arm-low.c:642: error: for each function it appears in.)
错误的信息为:linux-arm-low.c中的一个PTRACE_GETSIGINFO未声明
解决方法如下:
既然这个C文件中没有声明,就去查找一下这个变量位置:
grep "PTRACE_GETSIGINFO" * -nR
找到如下信息:
......
arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO       0x4202
.......
说明PTRACE_GETSIGINFO是在交叉编译工具链:linux/ptrace.h文件里定义的
于是在linux-arm-low.c加上:#include <linux/ptrace.h>;
再次编译:#make CC=arm-linux-gcc 
完成后,将生成的gdbserver复制到开发板;

5、宿主机+目标板连调:

到目前为止我们需要的工具均已准备完成,可以进行最后的连接工作了;

当然之前我们还需要做一下热身工作:

1、需要使用GDB+GDBServer连调的程序,编译的时候请使用-g 选项;

2、将应用程序copy至宿主机arm-linux-gdb相同目录下:

热身工作完成,现在开始联机调试:

首先在目标板上运行gdbserver  <主机IP:端口号>  需要连调的程序名 ,举个小例子:gdbserver 192.192.192.105:1234 test  (test是我的示例联调程序)          如果权限不够,请自行chmod 

                        这时打印信息 :

Process test created; pid = 751
Listening on port 1234  即在监听1234端口

切换到宿主机系统:使用./arm-linux-gdb test进入到gdb调试环境中:

GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i386-pc-linux-gnu --target=arm-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from test...done.

这时,我们需要使用远程调试的命令:

(gdb) target remote 192.192.192.200:1234 (IP为目标板IP,端口为刚才我们打开的目标板监听端口)

此时 目标终端打印命令:Remote debugging using 192.192.192.105:1234

连接成功!

6、Gdb使用常用命令说明:

GDB的一些常用命令均支持,在此不一一详述。

不过在联调的环境下,运行程序需要使用 “c”而不是“r”

如果运行带参数的程序,请使用 set args 进行参数传递,比如 运行的程序为  ./test -a -b -c  我们需要进行参数传递的格式为set args -a -b-c    再次  “c”;即可

7、参考资料:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: gdbgdbserver远程调试技术的意义在于提供了一种方便有效的方式来调试运行在远程目标设备上的程序。这对于嵌入式系统或远程服务器等分布式系统的开发和调试非常有用。 首先,gdbgdbserver远程调试技术允许开发人员在不在本地环境下的目标设备上进行调试。这意味着开发人员可以通过网络连接到远程设备,并使用本地的gdb客户端来远程控制和调试目标设备上的程序。这样,不再需要将全部的代码和调试环境放在开发人员的本地机器上,大大节省了开发人员的时间和资源。 其次,远程调试技术提供了实时调试的能力。开发人员可以监控目标设备上的程序执行过程,并在运行时观察程序的状态和变量的值。这对于发现和解决运行时错误和异常非常重要。通过远程调试,开发人员可以更直接地了解程序在实际环境下的行为,从而更有效地修复问题。 此外,远程调试技术还提供了一个更加安全且可靠的调试方法。使用gdbgdbserver进行远程调试,可以避免将敏感的代码或数据复制到本地环境中,减少了潜在的安全风险。同时,由于远程调试是通过网络进行的,即使目标设备处于远程位置,也能够进行调试,减少了物理上接触设备的需求,提高了效率。 总而言之,gdbgdbserver远程调试技术的意义在于提供了一种方便、实时、安全的方法来远程控制和调试目标设备上的程序,使开发人员能够更有效地进行嵌入式系统和分布式系统的开发和调试工作。 ### 回答2: gdb gdbserver远程调试技术是一种用于在线调试嵌入式系统的工具。它的意义在于提供了一种便捷和高效的方式来调试远程的嵌入式设备。 首先,gdb gdbserver远程调试技术可以节省时间和资源。在传统的调试方式中,如果想要调试远程的嵌入式设备,通常需要将设备连接到开发服务器并使用串口进行调试。这种方式不仅繁琐,还占用了宝贵的硬件资源。而gdb gdbserver远程调试技术可以直接在目标设备上运行gdbserver,并通过网络连接到开发服务器上的gdb,使得调试变得更加方便快捷。 其次,gdb gdbserver远程调试技术可以提高团队协作效率。在实际的嵌入式系统项目中,通常会有多个开发人员同时开展工作。使用gdb gdbserver远程调试技术,不同的开发人员可以同时连接到同一个目标设备上进行调试,而不会相互干扰。这样可以提高团队成员之间的协作效率,加快问题解决和软件开发的速度。 此外,gdb gdbserver远程调试技术还提供了更灵活的调试方式。通过gdb gdbserver的支持,开发人员可以在目标设备上进行远程程序的调试,包括断点设置、变量查看、程序运行控制等。这种方式可以更加直观地观察到程序的实际执行情况,帮助开发人员更好地理解和解决问题。 总之,gdb gdbserver远程调试技术的意义在于提供了一种便捷、高效和灵活的嵌入式系统调试方式,节省了时间和资源,提高了团队协作效率,同时也方便开发人员更好地理解和解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值