花之剑'HOME

一朵飘舞在风中的雪花,挣扎着,不想被融化。

linux下崩 跟踪和调试总结

Posted on 2008-09-11 18:01 花之剑 阅读(583) 评论(0)  编辑  收藏 所属分类: linux

linux下crash bug 跟踪和调试总结

在linux系统下,遇到crash的时候,不太好解决,只能靠详细的日志来定位到具体的crash函数。以下是linux下常用的几种定位crash的方法

  1. 用gdb 启动执行文件(编译的时候采用g++ -g),执行文件小还可以接受,如果是上万行的代码,这种方法根本不可行。

  2. 采用生成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


只有注册用户登录后才能发表评论。


网站导航: