当前位置: 技术问答>linux和unix
高分求教GDB问题
来源: 互联网 发布时间:2015-09-07
本文导语: 我现在有一个比较复杂的程序,在一台嵌入式操作系统上运行,经常会死机(不仅仅是程序死,而是系统崩了),我想用GDB来调试,有谁能告诉我怎样调? 死机是随机的,也就是说并不是程序运行在某个特定的地方...
我现在有一个比较复杂的程序,在一台嵌入式操作系统上运行,经常会死机(不仅仅是程序死,而是系统崩了),我想用GDB来调试,有谁能告诉我怎样调?
死机是随机的,也就是说并不是程序运行在某个特定的地方死。
GDB可以跟踪系统内核进程吗?可以跟踪进系统函数吗?如何在GDB中查看汇编代码?
死机是随机的,也就是说并不是程序运行在某个特定的地方死。
GDB可以跟踪系统内核进程吗?可以跟踪进系统函数吗?如何在GDB中查看汇编代码?
|
关于coredump怎么使用你可以去网上搜下,是程序运行崩溃时系统自动生成的一个映象文件,可以用gdb来调试这个文件定位错误。不过不知道你所运行的操作系统是否支持
backtrace是gdb中用来看当前堆栈的命令
backtrace是gdb中用来看当前堆栈的命令
|
用打印日志方式调试吧
|
在gdb中查看汇编代码可以用disassemble,汇编单步用si和ni,跟进系统函数没试过,估计只能是汇编码了,除非你找到这个函数的源码。
不过比较复杂的东西我的做法是先找几个疑点,用打印的方式先把怀疑有问题的变量打出来,等范围比较小了再用gdb,不然会累死的。
嵌入式没玩过,没什么建议。
不过比较复杂的东西我的做法是先找几个疑点,用打印的方式先把怀疑有问题的变量打出来,等范围比较小了再用gdb,不然会累死的。
嵌入式没玩过,没什么建议。
|
“死机是随机的”,这种bug太难调。尤其是死机周期比较长。可能是内存出问题了。
如果你的系统是模块化的,就一个模块一个模块去掉,看什么地方出的问题。或者用efence查一下内存。
如果你的系统是模块化的,就一个模块一个模块去掉,看什么地方出的问题。或者用efence查一下内存。
|
gdbserver
|
attach pid
系统调用是进不去的。
系统调用是进不去的。
|
让他频繁死机找到死机的规律,然后就可以找到问题原因,然后模块。
|
不知道什么时候会崩溃的问题,用coredump是最好的方法,当然配合日志更好定位问题
想跟踪系统调用的话用strace看吧
想跟踪系统调用的话用strace看吧
|
那就用gdb跑着,等什么时候crash了,再backtrace找出错的地方好了。