gdb 调试coredump文件过程

gdb 调试coredump文件过程:html

第一步:首先须要一个进程的coredump文件,怎么搞出coredump文件呢?linux

一、 ps -fax|grep                 进程名称 找到进程的pid多线程

二、gdb -p pid                     调试进程spa

三、gcore coredump名称        则生成core文件线程

https://www.cnblogs.com/wangjian8888/p/11978397.html 该连接有应用程序崩溃后生成core文件具体方法debug

第二步:找出coredump文件的应用程序调试

一、gdb -c corefile   使用gdb调试core文件htm

二、info auxv          索引31对应的是core文件的应用程序blog

第三部:gdb使用应用程序调试coredump文件索引

gdb  coredump应用程序  coredump文件     调试coredump文件 

 

经过以上三步就能够调试coredump文件了

经过如下命令调试coredump文件

info threads 显示全部线程

bt 显示线程堆栈信息

thread thread_num   切换线程

frame num  切换栈

info r 显示当前帧的寄存器信息 (每一帧的寄存器信息都是不相同的)

 

readelf应用coredump

readelf -h 读取coredump文件头

readelf -wl 读取应用程序debug_line

readelf -wf 读取应用程序fde和cie信息

 

 

gdb core 多线程
在linux环境下调试多线程,总以为不像.NET那么方便。这几天就为找一个死锁的bug折腾很久,介绍一下用过的方法吧。

多线程若是dump,多为段错误,通常都涉及内存非法读写。能够这样处理,使用下面的命令打开系统开关,让其能够在死掉的时候生成core文件。   
ulimit -c unlimited
这样的话死掉的时候就能够在当前目录看到core.pid(pid为进程号)的文件。接着使用gdb:
gdb ./bin ./core.pid 
进去后,使用bt查看死掉时栈的状况,在使用frame命令。

还有就是里面某个线程停住,也没死,这种状况通常就是死锁或者涉及消息接受的超时问题(听人说的,没有遇到过)。遇到这种状况,可使用:
gcore pid (调试进程的pid号) 手动生成core文件,在使用pstack(linux下好像很差使)查看堆栈的状况。若是都看不出来,就仔细查看代码,看看是否是在 if,return,break,continue这种语句操做是忘记解锁,还有嵌套锁的问题,都须要分析清楚了。 最后,说一句,静心看代码,捶胸顿足是没有用的。
相关文章
相关标签/搜索