Linux的segfault日志怎么看
正文
Linux环境,当应用程序段错误宕机时,系统log(/var/log/messages*)会记录类似以下的错误日志:
segfault at 10 ip 00007f9bebcca90d sp 00007fffb62705f0 error 4 in demo[7f9beb83a000+f6f000]
这条log记录了与当启现场有关的信息。
报错信息意义
- at:试图访问的内存位置(10和11是一个指针的偏移量,我们希望它被设置为一个有效值,但它却指向0)
- ip:指令指针。
- sp:栈指针。
- error:错误代码,请参阅下面这在x86上的含义,
- snippet.c
/* * Page fault error code bits: * * bit 0 == 0: no page found 1: protection fault * bit 1 == 0: read access 1: write access * bit 2 == 0: kernel-mode access 1: user-mode access * bit 3 == 1: use of reserved bit detected * bit 4 == 1: fault was an instruction fetch * bit 5 == 1: protection keys block access * bit 15 == 1: SGX MMU page-fault */
如果是应用程序
那么,可以通过ip寄存器信息获得宕机位置:
addr2line -e path_of_demo 00007f9bebcca90d
如果是动态库
那就麻烦了。动态链接库结束后,不可能知道库在内存中的位置,只能在gdb下重现了。
参考
打赏作者以资鼓励: