一尘不染

解释段错误消息

linux

以下段错误消息的正确解释是什么?

segfault at 10 ip 00007f9bebcca90d sp 00007fffb62705f0 error 4 in libQtWebKit.so.4.5.2[7f9beb83a000+f6f000]
segfault at 10 ip 00007fa44d78890d sp 00007fff43f6b720 error 4 in libQtWebKit.so.4.5.2[7fa44d2f8000+f6f000]
segfault at 11 ip 00007f2b0022acee sp 00007fff368ea610 error 4 in libQtWebKit.so.4.5.2[7f2aff9f7000+f6f000]
segfault at 11 ip 00007f24b21adcee sp 00007fff7379ded0 error 4 in libQtWebKit.so.4.5.2[7f24b197a000+f6f000]

阅读 396

收藏
2020-06-02

共1个答案

一尘不染

这是一个段错误,原因是跟随空指针试图查找要运行的代码(即在指令提取期间)。

如果这是一个程序,而不是共享库

运行addr2line -e yourSegfaultingProgram 00007f9bebcca90d(并重复给定的其他指令指针值)以查看错误发生的位置。更好的方法是,获得一个带有调试工具的内部版本,并在诸如gdb之类的调试器下重现该问题。

由于是共享库

不幸的是,您被水淹了。事后无法知道动态链接程序将库放置在内存中的位置。重现该问题gdb

错误是什么意思

以下是字段的细分:

  • address(在之后at)-代码尝试访问的内存位置(很可能1011我们希望将其设置为有效值但指向的指针的偏移量0
  • ip-指令指针,即 试图这样做的代码在哪里
  • sp -堆栈指针
  • error-页面错误的错误代码;有关在x86上的含义,请参见下文。
/*
* 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
*/

2020-06-02