1·关于gdb调试
在网上能够搜索到很多关于gdb调试以及gdb命令的使用,在调试程序的时候非常的方便,但是对于嵌入式Linux上应用程序开发呢?可能很多都是在使用“printf”大法,的确printf可以解决问题,但是如果我们能够精确定位出错问题的代码岂不是更好?
然后再嵌入式linux上,可能你会使用arm-linux-gdb做一个stub来进行调试,由于在实际情况中,很多程序是放在脚本里,通过脚本来加载,而且程序繁多,不知道gdb对于这种方法可有什么比较好的调试方法(有的话请联系我qq353758205)。
2·嵌入式使用arm-linux-gdb
如果你的嵌入式程序经常出现segment fault,每次你都要去看源码,用printf来定位出错地方,工作量非常巨大麻烦,这里提供一个本人在实际运行中可行的方法供大家参考;
1.确保你的程序是加了调试信息-g,否则可能没用
2.设置:在启动你的程序之间,有必要对的开发板做一些简单的设置
- ulimit 查看你的系统对资源的限制情况
- ulimit -c unlimited 用来设置运行你的系统在应用程序崩溃之时可以生产core dump文件
- echo '/home/core-%p-%e' > "/proc/sys/kernel/core_pattern" 用于设置core dump文件最后保存文件目录,这里保存到/home/目录下,文件名以core-“出现的core程序名称”-编号
3.利用arm-linux-gdb调试
- copy你的core dump文件以及应用程序到某个目录下
- 运行arm-linux-gdb 你的程序 --quiet
- 进入gdb之后:运行core “core dump”文件
- set solib-absolute-prefix 你的lib库目录 ,一般就是你的rootfs文件的lib库目录(可选,最好设置,否则某些函数会显示“??”)
- 最有用的命令来了,bt or BT',(后面加一个‘/"可以详细显示)程序当时运行时的一个堆栈调用信息
- 可以使用list function来查看源码
以上内容是本人在根据Linux内核调试工具crash参考出来的,如果某人对linux内核调试有感兴趣,可以查找关于crash工具的使用,里面提供的一些命令是相当不错的,对于调试内核很有帮助!
如果在使用过程中遇到什么困难,可以联系我!