设为首页 收藏本站
查看: 505|回复: 0

[经验分享] 搭建交叉调试环境 arm-linux-gdb配合gdbserver

[复制链接]

尚未签到

发表于 2015-10-29 13:50:32 | 显示全部楼层 |阅读模式
  在嵌入式开发中,有时候需要进行源码级别的调试,可以设置断点,单步执行,相比于每步打印printf或者printk来说,更加友好。下面就来介绍这种调试方法。
  gdb交叉调试类似于网络浏览器,本地PC为客户端,远程开发板为服务器端,双方都要统一编译工具链,版本最好保持一致。  
  --target 指定了目标机交叉编译器前缀,比如--target=arm-linux ,缺省值为i386-linux
  --host   指定了编译后的程序需要在哪里运行, 比如,--host=arm-linux
  --prefix  指定了要安装的目录
  因此,在编译arm-linux-gdb的时候,不需要指定host,因为它是在本地PC上跑的,在编译gdbserver时,需要指定host为arm-linux,因为,gdbserver是在arm平台上跑的。两者都需要指定相同的target。
      编译arm-linux-gdb
    在gdb-7.8的解压目录下新建 arm-gdb,用于存放编译生成文件。
  ./configure --target=arm-linux --prefix=/ -gdb/
  然后make && make install ,就可以在arn-gdb/bin/目录下面找到arm-linux-gdb,
  如果有需要,可以将此执行路径加入到系统环境变量中去。
      编译gdbserver
    在gdb-7.8目录中,切换到gdb/gdbserver目录中,
  ./configure  --target=arm-linux  --host=arm-linux
  然后 make CC=/opt/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc ,就可以再当前目录下生成gdbserver。
  这里需要注意的是运行gdbserver还需要libthread_db库,若你自己做的文件系统内没有这个库的话需要将本地交叉编译工具中的libthread_db*拷贝到开发板中去。
  sudo cp /opt/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/libthread_db* /home/hao/nfs/lib/ –d
  使用-d选项,复制时,连同链接关系一起复制过去。
      使用方法
    将生成的gdbserver拷贝到开发板上去,PC机和开发板之间通过nfs文件系统沟通,开发板IP:192.168.0.200,本地主机IP:192.168.0.104
  在本地机器上面,用arm-linux-gcc –g 编译一个应用程序,在开发板上,执行
DSC0000.png
  gpbserver使用方法: gpbserver 开发板ip地址:通信端口(随意取) 要调试的程序 【程序的命令行参数】
  然后在本地机器上面,启动arm-linux-gdb,操作如下:
DSC0001.png
  连接成功后,开发板上会显示:
DSC0002.png
  然后就可以在本地PC上面执行gdb命令,调试输出在
  注意:执行target remote 后,开发板上面的程序已经在运行,本地不能使用run命令,而能用continue命令。
  调试命令在本地输入,调试输出结果在开发板上面输出。
  原理介绍,在开发板上面的gdbserver会启动一个子进程,然后用测试程序替换子进程,自身作为父进程,接收来自PC机上面arm-ling-gdb的调试命令输入,
  
  让程序在奔溃时产生core dump文件,用PC机上面的arm-linux-gdb来分析此文件,确定崩溃位置。   
  1. 产生core dump文件
  linux系统默认是不产生core dump文件(ulimit –c 得出结果为0,程序不产生),设置ulimit –c unlimited,不限制core dump输出大小。
  2. 执行待测试程序,产生core dump文件,默认名为core
  3. 使用arm-linux-gdb调试core文件
  在本地PC机器上面,执行 arm-linux-gdb ./test_debug ./core 文件,就可以发现产生段错误的地址。
  
  这样的调试,看起来很复杂,如果实在想调试,而且CPU处理速度够快的话,直接移植低版本的gdb到板子上就行。
  
  gdb交叉调试相关链接:
  tiny4412 android gdb调试问题,不能打断点(已解决)
  使用gdbserver远程调试 遇到问题
  gdb+gdbserver交叉编译
  
Technorati 标签: gdbserver,linux

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-132352-1-1.html 上篇帖子: centos无法创建文件之磁盘空间问题 下篇帖子: ssh-key免密钥认证实战
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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