【eclipse】gdb+gdbserver远程调试技术——环境搭建+调试

对于软件开发来说,调试程序是比不可少的。对于开发PC软件通常系统已经继承了调试工具(比如Linux系统的GDB),或者IDE直接支持对程序的调试。而对于开发嵌入式软件来说调试的手段比较有限,很多开发者仅有的调试手段依然是最原始的打印(我也是其中之一)。当然除了打印调试之外还有通过gdb+gdbserver来调试,gdbserver在目标系统中运行,gdb则在宿主机上运行。

一、源码下载

对于嵌入式软件开发调试工具没有现成的,且嵌入式系统比较繁杂,gdbserver需要根据目标系统单独编译。gdb的源码包下载地址为:http://ftp.gnu.org/gnu/gdb/。目前最新的版本为8.0但由于8.0加入了C++11,而我的目标系统的交叉工具链不支持C++11,故下载7.12版本。

二、编译arm-linux-gdb

Linux系统本身已经自带gdb工具,但无法用在嵌入式调试中,需要单独编译arm-linux-gdb。
  
1.解压源码包

$ tar zxvf gdb-7.12.tar.gz
$ cd gdb-7.12/

2.生成Makefile
进入到安装目录下:/usr/local/loongson-gdb

$ /home/ppp/mysoft/gdb-7.12/configure --target=mipsel-linux --prefix=/usr/local/loongson-gdb

–target:指定目标平台。–prefix:指定安装路径。
 
3.编译

$ make

4.安装

$ make install

配置环境变量或将mipsel-linux-gdb拷贝到/usr/bin/目录下。
gedit /etc/profile 加入环境变量
source /etc/profile

目前只用到bin/目录下的可执行文件mipsel-linux-gdb,执行下面命令:
$ sudo cp __install/bin/mipsel-linux-gdb /usr/bin/
将生成的arm-linux-gdb文件拷贝到系统/usr/bin/目录下,这样便可以在任何地方很方便的调用。

三、编译gdbserver

编译gdbserver不需要执行make install命令,make之后在当前目录下会生成可执行程序gdbserver,将其拷贝到目标系统中。

1.生成Makefile

$ cd gdb/gdbserver/
$ mkdir build
$ cd build
$ …/configure --target=mipsel-linux --host=mipsel-linux

–host:指定交叉工具链,mipsel-linux为我的目标系统的交叉工具链。
(–target=arm-linux表示目标平台,–host表示主机端运行的是arm-linux-gdb,不需要配置–prefix,因为gdbserver不在主机端安装运行)
  
2.编译

$ make
#make CC=/usr/local/loongson/bin/mipsel-linux-gcc
这一步是指定mipsel-linux-gcc的绝对路径,注意,是绝对路径。如果没有错误的话就会在gdbserver的目录下生成gdbserver的可执行文件,注意此时要更改其属性,否则可能会出现无法访问的情况,

#chmod 777 gdbserver将其更改为任何人都可以读写执行;

#mipsel-linux-strip gdbserver;使用此命令处理一下gdbserver,将多余的符号信息删除,可让elf文件更精简,通常在应用程序的最后发布时使用;然后把它烧写到flash的根文件系统分区的/usr/bin(在此目录下,系统可以自动找到应用程序,否则必须到gdbserver所在目录下运行之),或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。

四、 gdb+gdbserver 调试流程

交叉编译,带参数-gstabs或-g加入调试信息。加入要调试的程序是helloworld:

$mipsel-linux-gcc -g helloworld.c -o helloworld

然后将生成的可执行文件拷到开发板上:helloworld是欲调试程序,它和gdbserver在同一个目录下:(下面是开发板ip)

gdbserver 192.168.123.221:999 helloworld

此时gdbserver开始监听999端口;这个端口号应该是用来和宿主机进行通讯;

在宿主机上,#export PATH=$PATH:/usr/local/arm-gdb/bin
#mipsel-linux-gdb helloworld
(gdb)target remote 192.168.123.221:999
(gdb)c

gdbserver中run命令不能用,可以使用continue, break, print, next, step, list, 等
注:几个常用的调试命令
(1)l:列出所有源代码
(2)break main:在main处打断点
break test_debug.c:11:在test_debug.c的11行打断点
(3)c:运行到断点处
(4)step:单步执行
(5)next:单步执行,但是step会进入函数里面,但是next不会
(6)print a:打印a这个变量的值
(6)quit:退出,输入此命令则开发板上的gdbserver也退出

总之总之就是,先把要调试的程序在目标班上./gdbserver <host ip : 端口> helloworld,让gdbserver运行起来;
然后在宿主机上mipsel-linux-gdb helloworld 进入gdb调试的界面;
然后通过(gdb)target remote <target-board-ip:端口> 建立链接;
建立链接后,就可以通信,然后开始调试!

五、eclipse手动调试(自动还没研究成功)
eclipse调试开发板
1、windows菜单-》preferences->C/C++ ->Debug->Gdb选项下:
GDB debugger:设置为mipsel-linux-gdb绝对路径
2、Run->Debug configurations-》双击C/C++ Remote Application新建配置
3、main选项卡最下面点击select other选择using GDB(DSF) manual Remote Debugging Launcher
4、Debugger选项卡下的main选项卡:GDB debugger:设置为mipsel-linux-gdb绝对路径
Debugger选项卡下的connection选项卡:type:TCP;Host name or IP address:192.168.123.221 (开发板IP);Port number:999
5、开发板上运行:gdbserver 192.168.123.221:999 helloworld
6、eclipse上 debug

### 回答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远程调试技术的意义在于提供了一种便捷、高效和灵活的嵌入式系统调试方式,节省了时间和资源,提高了团队协作效率,同时也方便开发人员更好地理解和解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值