dmesg和addr2line 定位 segfault

程序长时间运行崩溃,但是没有保存core dump消息。可以用下面的方法定位出程序出错位置:

1. 用dmesg查找出错的代码段地址

dmesg和addr2line 定位 segfault

ip 000000000041ccec 发生错误时指令的地址, sp sp 00007fff53c48700 堆栈指针

error 4的意义如下,可以对照参考:

bit2:值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界
bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界
bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址

4正好为用户态内存读操作访问出界, 读非法地址。

2.用addr2line将地址解析成函数名

dmesg和addr2line 定位 segfault

可以看出出错函数是tmp_remove_subs

上一篇:codeforces 484b//Maximum Value// Codeforces Round #276(Div. 1)


下一篇:数据结构(左偏树,可并堆):BNUOJ 3943 Safe Travel