FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
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下重现了。

参考



打赏作者以资鼓励:
移动端扫码阅读: