Posted on 2008-09-11 18:01
花之剑 阅读(583)
评论(0) 编辑 收藏 所属分类:
linux
linux下crash bug 跟踪和调试总结
在linux系统下,遇到crash的时候,不太好解决,只能靠详细的日志来定位到具体的crash函数。以下是linux下常用的几种定位crash的方法
- 用gdb 启动执行文件(编译的时候采用g++ -g),执行文件小还可以接受,如果是上万行的代码,这种方法根本不可行。
- 采用生成core文件的方式,来记录调用的堆栈的过程。
在启动程序之前,在Root权限下输入ulimit -c 10000.设置可生成的core文件的大小。然后启动程序。
一旦,程序crash,那么堆栈信息将被写道一个core文件中,拿到core文件之后。运行gdb a.out core.566 将恢复到crash的时候的那个栈区。这样,可以定位到crash函数。
3.第三种方法是,采用backtrace来记录堆栈。
这种方法是注册信号处理函数,例如注册SIGSEGV,内存出错信号处理函数,如果发生内存错误。
处理函数调用backtrace,将堆栈信息写入一个日志文件中。堆栈信息包含程序调用堆栈的过程以及函数地址。拿到堆栈信息后,我们将可执行文件反汇编 例如:objdump -d a.out>out.txt,那么out.txt将记录函数的逻辑地址。相互比较之后,就可以定位到crash的函数。 总结以上,第二和第三种方法都可以实施。
nice