8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

解释段错误消息

Sefa Dedeoglu 2月前

132 0

以下段错误消息的正确解释是什么?segfault at 10 ip 00007f9bebcca90d sp 00007fffb62705f0 error 4 in libQtWebKit.so.4.5.2[7f9beb83a000+f6f000]segfault at 10 ip

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

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]
帖子版权声明 1、本帖标题:解释段错误消息
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Sefa Dedeoglu在本站《linux》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这是一个由于跟随空指针尝试查找要运行的代码(即在获取指令期间)而导致的段错误。

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

    运行 addr2line -e yourSegfaultingProgram 00007f9bebcca90d (并针对给定的其他指令指针值重复此操作)以查看错误发生的位置。更好的方法是获取经过调试的版本,并在 gdb 等调试器下重现问题。

    因为它是一个共享库

    不幸的是,你被坑了;事后不可能知道动态链接器将库放在内存中的什么位置。在 gdb .

    错误含义

    以下是各个字段的细分:

    • p4

    • p5

    • p6

    • p7

      /* * 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 */
  • 根据 .com/a/2179464/1100614 ,error 不是 errno 的值,而是特定于体系结构的页面错误错误代码。

  • pb2q 2月前 0 只看Ta
    引用 4

    是的,我也可以弄清楚 ip 和 sp 的含义,但是 at 后面的数字是什么意思???

  • @Nils,这是它​​试图分页的地址。由于这里地址很低,所以大概是应用于 NUL 指针的偏移量。

  • \'不幸的是,您被骗了;事后不可能知道动态链接器将库放在内存中的什么位置。\' - 这是不正确的,基址实际上是打印在错误消息本身中的(在本例中为 7f9beb83a000)。即使不是,由于基址是页面对齐的,因此通常可以做出合理的猜测。

  • 错误 4 表示“原因是用户模式读取导致未找到页面”。 这里 .

    这是内核中的定义。请记住,4 表示设置了位 2,而没有设置其他位。如果将其转换为二进制,就会变得清晰。

    /*
     * 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
     */
    #define PF_PROT         (1<<0)
    #define PF_WRITE        (1<<1)
    #define PF_USER         (1<<2)
    #define PF_RSVD         (1<<3)
    #define PF_INSTR        (1<<4)
    

    现在,“ip 00007f9bebcca90d”表示发生段错误时指令指针位于 0x00007f9bebcca90d。

    \'libQtWebKit.so.4.5.2[7f9beb83a000+f6f000]\' 告诉您:

    • 崩溃所在的对象:\'libQtWebKit.so.4.5.2\'
    • 该对象的基地址 '7f9beb83a000'
    • 该物体有多大:\'f6f000\'

    如果你获取基地址并从 ip 中减去它,你就会得到该对象的偏移量:

    0x00007f9bebcca90d - 0x7f9beb83a000 = 0x49090D
    

    然后您可以在其上运行 addr2line:

    addr2line -e /usr/lib64/qt45/lib/libQtWebKit.so.4.5.2 -fCi 0x49090D
    ??
    ??:0
    

    就我而言,它没有成功,要么我安装的副本与您的不相同,要么它被剥离了。

  • 此答案表明,接受答案中的评论“很不幸,您被坑了;事后不可能知道动态链接器将库放在内存中的什么位置”是错误的。段错误信息本身会告诉您发生段错误时共享库的基址。

  • 我刚刚在自己的错误代码上使用了 -fCi 选项,并在一分钟内修复了该错误。谢谢,帮助很大。

  • 抱歉,您能解释一下吗?例如,在这种情况下? 7ffe44462000 ip 00007f4ee2211f0e sp 00007ffe44460168 段错误 6 在 libc-2.26.so[7f4ee2093000+1d6000] ### 应该是:-fCi 0x17EF0E

  • 让我们回到源代码—— 例如 2.6.32 。如果设置了 show_unhandled_signals sysctl,则 arch/x86/mm/fault.c 中的 show_signal_msg() 函数会打印该消息。

    \'error\' 不是 errno 也不是信号号,而是 \'页面错误错误代码\'——请参阅枚举 x86_pf_error_code 的定义。

    \'[7fa44d2f8000+f6f000]\' 是崩溃时映射有问题对象的虚拟内存区域的起始地址和大小。\'ip\' 的值应该适合这个区域。掌握了这些信息,在 gdb 中查找有问题的代码应该很容易。

  • ihdv 2月前 0 只看Ta
    引用 12

    \'ip 的值应该适合这个区域。\' 这对我来说不清楚。这是否意味着:如果 ip 不适合这个区域,程序就是错误的。或者:总是期望内核指定一个位于这个区域内的地址(因此如果它超出范围,内核中就会出现一些可疑的情况)

  • 您可以按照以下步骤修复此问题:

    • 消息

    例如:[4970814.649014] 中发生错误 4 [46459]: 段错误发生在 8 ip 000055ce91269328 sp 00007fff71b98480 中, upowerd [55ce91248000+39000][4970840.152464] upowerd ,upowerd upowerd [55c18f8c4000+39000]

    • p2

    • p3

    • p4

    例如:通常情况下,你会将其删除并在最后一行提及

    [4970942.517131] upowerd[47466]: 8 ip 00005637fd95b328 sp 00007ffeb77c3460 处发生段错误,upowerd 中出现错误 4( 已删除 )[5637fd93a000+39000]

    此致,

    穆斯塔法·库鲁马

返回
作者最近主题: