gdb和gdbserver的安装和调试



嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。gdb调试的时候,pc机上的gdb向开发板上的gdbserver发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作!一般Linux发行版中都有一个可以运行的GDB,但开发人员不能直接使用该发行版中的GDB来做远程调试,而要获取GDB的源代码包,针对arm 平台作一个简单配置,重新编译得到相应GDB。

1 、编译安装gdb:首先下载gdb源码,我下载的是gdb-6.6.tar.gz

#tar xvzf gdb-6.6.tar.gz

#cd gdb-6.6

#./configure –target=arm-linux  –prefix=/usr/local/arm-gdb -v (注意此时是root登陆,因为安装目录在/usr/local)

(–target配置gdb的目标平台,–prefix配置安装路径,当然其他路径也可以,跟下面配置一致即可,须在环境变量中声明,启动arm-linux-gdb需要,可更改/etc/profile或~/.bash_profile或~/.bashrc,添加:

export PATH=$PATH:/usr/local/arm-gdb/bin,这样可以找到路径)

#make 

#make install(生成arm-linux-gdb,并存入/usr/local/arm-gdb/bin/,查询确认下;或者也可以启动arm-linux-gdb,若成功,则证明安装无误)

2,编译gdbserver

首先要进入gdb-6.6/gdb/gdbserver这个目录

#./configure –target=arm-linux –host=arm-linux

(–target=arm-linux表示目标平台,–host表示主机端运行的是arm-linux-gdb,不需要配置–prefix,因为gdbserver不在主机端安装运行)

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

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

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

3. gdb+gdbserver 调试流程

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

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

然后将生成的可执行文件拷到开发板;


在目标板上:helloworld是欲调试程序,它和gdbserver在同一个目录下,192.168.177.71是宿主机的IP

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


在宿主机上,#export PATH=$PATH:/usr/local/arm-gdb/bin
      #arm-linux-gdb helloworld             ;图中192.168.177.102为目标板的IP

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运行起来;

然后在宿主机上arm-linux-gdb  helloworld 进入gdb调试的界面;

然后通过(gdb)target remote <target-board-ip:端口> 建立链接;

建立链接后,就可以通信,然后开始调试!






  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值