标签:
1.如果崩溃在程序中,例如 SMH kernel: process_name[32183]: segfault at 24 ip 0000000000412b13 sp 00007fffaab744e0 error 6 in process_name[400000+6e000]
1> 可以通过 addr2line -e process_name 0x412b13 -f 具体定位到源码中的那行那个函数。
2> 可以通过反汇编 objdump -dgS process_name > output 然后在output文件中搜索412b13,同样也可以定位到具体的函数。
2. 如果程序崩溃在共享库中,例如 process_name[10678]: segfault at 1 ip 00007f6ddc43c650 sp 00000000461b41a8 error 4 in libc-2.4.so[7f6ddc3ca000+127000]
指令的实际地址是:00007f6ddc43c650 - 7f6ddc3ca000 = 0x72650
1> 可以通过 addr2line -e libc-2.4.so 0x412b13 -f 具体定位到libc-2.4.so中的那个函数。2> 可以通过反汇编 objdump -dgS libc-2.4.so > output 然后在output文件中搜索72650,同样也可以定位到具体的函数。
3.对上述两个示例做一些必要的说明:
1> error code(比如上述的 error 4 & error 6)做一些说明: 具体可以在/usr/src/linux***/arch/i386/mm/fault.c中可以通过搜索"segfault at"找到
/*
* Page fault
error code bits
* bit 0 == 0 means no page found, 1 means protection fault
* bit 1 == 0 means read, 1 means write
* bit 2 == 0 means kernel, 1 means user-mode
* bit 3 == 1 means use of reserved bit detected
* bit 4 == 1 means fault was an instruction fetch
*/
4>.参考资料 http://www.2cto.com/kf/201311/256739.html
http://blog.chinaunix.net/uid-20357359-id-1963702.html
http://www.xxlinux.com/linux/article/accidence/technique/20070125/7209.html
标签:
原文地址:http://blog.csdn.net/hulihong/article/details/46454653