说明:gdb可以实现源代码单步调试

原理:

1、gdb在PC机上运行,gdbserver在arm开发板上运行,gdbserver在开发板上相当于父进程,应用相当于子进程,PC上gdb发命令给gdbserver,gdbserver在发命令给应用子进程

2、gdb在运行的时候需要一个带有调试信息的app文件,比如gdb要读应用中某个变量的值,这个文件就提供了变量的地址

(eclipse是一种gdb前台图像界面工具,有空可以研究下)

编译gdb,gdbserver
tar xjf gdb-7.4.tar.bz2
cd gdb-7.4/
./configure --target=arm-linux(target指的意思是用于arm版,host指的意思是运行环境,默认是PC,在这里可以不用设置)
make(make  install prefix=$PWD/tmp )
把arm-linux-gdb(如果make的时候安装到/tmp目录下时,其在tmp下的bin下面)复制到/bin目录

cd gdb/gdbserver/
./configure --host=arm-linux

make

报错:提示linux-arm-low.c 中PTRACE_GETSIGINFO undeclared未定义

进入交叉编译工具链中执行grep “PTRACE_GETSIGINFO” *nR,发现在include/linux/ptrace.h中有定义,查看linux-arm-low.c,发现其是include <sys/ptrace.h>,包含的有问题,改为<linux/ptrace.h>
cp gdbserver /work/nfs_root/first_fs/bin

编译要调试的应用程序,编译时加上-g选项,用于生成gdb需要的应用程序调试信息,信息和程序包含在一起

调试:
1. 在ARM板上
gdbserver 192.168.1.17:2345 ./test_debug //2345端口随便写,ip是开发板自己的ip

2. 在PC上
/bin/arm-linux-gdb ./test_debug
输入:target remote 192.168.1.17:2345
然后: 使用gdb命令来控制程序

l命令是list的意思,会打印全部应用程序源码

break 函数名  其会函数中变量定义下面打上断点,支持c命令,运行(continue)

break 应用名.c:行号,可以在文件中第几行打上断点

step  单步执行,遇到函数会进入函数   next 单步执行,不会进一个函数  nexti执行下一条汇编

print 变量  会打印变量的值

另一种方法:
让程序在开发板上直接运行,当它发生错误时,令它产生core dump文件
然后使用gdb根据core dump文件找到发生错误的地方
在ARM板上:
1. ulimit -c unlimited(设置core文件的大小)
2. 执行应用程序 : 程序出错时会在当前目录下生成名为core的文件

在PC上:
3. /bin/arm-linux-gdb ./test_debug ./core 会直接运行,并打印出错信息
4、在执行 backstrace或者backtrace指令可以参看出错的函数调用关系,命令简写bt

最新文章

  1. log4net写入mysql完整例子
  2. vs2010 在64bits系统下编译
  3. 【Spring】Spring AOP实现原理
  4. 03_汇编语言(n个数找最大值)
  5. selenium webdriver
  6. To add private variable to this Javascript literal object
  7. QuickXdev+sublime text打造quick-cocos2d-x开发环境
  8. 面试常备题---二叉树总结篇(zt)
  9. C#使用SQLite出错:无法加载 DLL“SQLite.Interop.dll”,找不到指定的模块
  10. MySQL参数优化
  11. 射频识别技术漫谈(23)——ISO15693的载波、调制与编码
  12. RFS的web自动化验收测试——第14讲 万能的evaluate
  13. 【JS】布尔逻辑
  14. 使用HTML5地理位置定位到城市的方法及注意事项
  15. Vuejs 页面的区域化与组件封装
  16. mysql 在一个实例运行情况下再搭建一个实例
  17. Java中,尽量相信自己,使用自己写的方法,不要使用底层提供的方法。都是坑。
  18. Codeforces --- 982C Cut &#39;em all! DFS加贪心
  19. [luogu1486][郁闷的出纳员]
  20. POI2014解题报告

热门文章

  1. Kinect 开发 —— Hello,Kinect
  2. 新版mysql修改root密码
  3. 小米开源文件管理器MiCodeFileExplorer-源码研究(2)-2个单实例工具类
  4. 微信小程序从零开始开发步骤(三)底部导航栏
  5. 关于Blocking IO,non-Blokcing IO,async IO的区别和理解
  6. 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】
  7. OSI模型与TCP/IP协议族
  8. 软件project经验总结系列之三 - 计划阶段控制
  9. MDL--元数据锁的锁请求与锁等待+元数据锁类对象
  10. shiro session管理