搭建交叉调试环境 arm-linux-gdb配合gdbserver
在嵌入式开发中,有时候需要进行源码级别的调试,可以设置断点,单步执行,相比于每步打印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 编译一个应用程序,在开发板上,执行

gpbserver使用方法: gpbserver 开发板ip地址:通信端口(随意取) 要调试的程序 【程序的命令行参数】
然后在本地机器上面,启动arm-linux-gdb,操作如下:

连接成功后,开发板上会显示:

然后就可以在本地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调试问题,不能打断点(已解决)
搭建交叉调试环境 arm-linux-gdb配合gdbserver的更多相关文章
- Redis源码漂流记(二)-搭建Redis调试环境
Redis源码漂流记(二)-搭建Redis调试环境 一.目标 搭建Redis调试环境 简要理解Redis命令运转流程 二.前提 1.有一些c知识简单基础(变量命名.常用数据类型.指针等) 可以参考这篇 ...
- 用Intellij idea搭建solr调试环境
最近在使用solr时,配置会有一些问题,log里面打印出日志了,但是还是不知道发生这样错误的原因.于是想学习一下相关的solr源码,以下是如何搭建solr调试环境步骤. solr调试环境搭建,首先下载 ...
- 使用Sublime Text搭建python调试环境
原文地址:http://blog.csdn.net/wenxuansoft/article/details/38559731 pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的 ...
- win10下正确使用Sublime Text搭建python调试环境
pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 ...
- 使用Sublime Text搭建python调试环境[转]
pycharmt等IDE虽然用着爽,但毕竟在速度.资源上还是比较让人不爽的. 使用IDE无非是图个方便省事,特别是像我这种有些记性差的来说. IDE说起来方便于的几个地方就是: 1.语法颜色高亮 2. ...
- HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码
版本 HDP:3.0.1.0 HBase:2.0.0 一.前言 之前的文章也提到过,最近工作中需要对HBase进行二次开发(参照HBase的AES加密方法,为HBase增加SMS4数据加密类型).研究 ...
- 使用Visual Studio Code搭建PHP调试环境
1.需要安装的软件 Visual Studio Code. WAMP(包括Apache.MySQL.PHP.以及最关键的XDebug) 2.下载软件 Visual Studio Code,光看名字就知 ...
- 用Qemu模拟vexpress-a9 (二) --- 搭建u-boot调试环境
参考: http://blog.csdn.net/caspiansea/article/details/12986565 环境介绍 Win7 64 + Vmware 11 + ubuntu14.04 ...
- 阿里云服务器连接以及centos 搭建 web java环境(linux java部署 tomcat部署)
版权声明:本文为博主原创文章,未经博主允许不得转载. 最近弄了个试用阿里云服务器倒腾了半天终于部署好,分享一下. 1.登入阿里云打开你申请的是云服务器的实例: 点击重置密码---重置密码后重启服务器才 ...
随机推荐
- 05-老马jQuery教程-动画
前言 jQuery的动画系统做的非常出色,而且把最常用的显示.隐藏.淡入淡出.滑动显示和折叠凳效果都做了很好的封装.跟jQuery的选择器和事件配合起来,可以实现很多很绚的效果,而且简单易用兼容性好. ...
- PHP中的WebService
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件, 就可相互交换数据或集成.依据Web Service规范实施的应用之间, 无论它们所使用的语言. ...
- C#学习笔记(28)——委托排序(2)自定义排序
说明(2017-11-21 15:24:50): 1. 定义一个排序方法,参数是字符串数组,和委托.MySort(nums, string.Compare),调用时只需要更换里面的委托方法就行,或者直 ...
- C#学习笔记(7)——委托
说明(2017-5-29 22:22:50): 1. 语法:public delegate void mydel();这一句在类外面,命名空间里面. 2. 专门新建一个方法,参数是委托: public ...
- MAMP和WAMP搭建Web环境,数据库,数据分布可视化
MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...
- andriod创建用户界面(1)
一.UI知识Activity 将UI放在一个Activity上面,可以在Activity的onCreate方法中添加UI. @Override public void onCreate(Bundle ...
- 在SQL Server中创建用户角色及授权
参考文献 http://database.51cto.com/art/201009/224075.htm 正文 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许 ...
- nginx封ip,禁用IP段的设置说明
nginx的ngx_http_access_module 模块可以封配置内的ip或者ip段,语法如下: deny IP; deny subnet; allow IP; allow subnet; # ...
- swift @AUTOCLOSURE 和 ?? ||
* {-webkit-tap-highlight-color: rgba(0,0,0,0);}html {-webkit-text-size-adjust: none;}body {font-fami ...
- 对于PHP中enum的好奇
PHP中没有struct.enum这些东西,虽然万能的array用起来很爽,但写出来的代码typo问题很多.可维护性也差,需要更多的测试来辅助,而一旦加上测试的工作量是否还谈得上『爽』就是个问号了. ...