【问题标题】:Geting SIGBUS (Bus error) @ 0 (0)killed by SIGBUS (core dumped) in RedhatGeting SIGBUS (Bus error) @ 0 (0)killed by SIGBUS (core dumped) in Redhat
【发布时间】:2011-04-12 07:16:15
【问题描述】:

我的进程在 2 个帐户的同一台机器上完美运行,但是当我将进程复制到其他帐户并运行该进程时,我得到了核心转储。 当我最终使用 strace 运行该进程时,我得到了:

--- SIGBUS(总线错误)@ 0 (0) --- +++ 被 SIGBUS 杀死(核心转储)+++

当我打开核心转储时,我得到了:

#0  0x000000360046fed3 in malloc_consolidate () from /lib64/libc.so.6
#1  0x00000036004723fd in _int_malloc () from /lib64/libc.so.6
#2  0x000000360047402a in malloc () from /lib64/libc.so.6
#3  0x00000036004616ba in __fopen_internal () from /lib64/libc.so.6
#4  0x0000000000fe9652 in LogMngr::OpenFile (this=0x2aaaaad17010, iLogIndex=0) at LogMngr.c:801

我可以通过打开文件进行日志记录看到它,但为什么它只在一个帐户中而在另一个帐户中很好?

【问题讨论】:

    标签: linux gdb core


    【解决方案1】:

    您可以从未对齐的内存访问中获得 SIGBUS。您使用的是 mmap、共享内存区域或类似的东西吗?

    【讨论】:

    • 在 Linux/x86 和 x86_64(可能是 OP 所在的位置)上,SIGBUS 可能不会来自未对齐的访问。
    【解决方案2】:

    malloc 中的任何核心转储总是表明堆损坏,而堆损坏通常是偷偷摸摸的:它可能永远不会出现在机器 A 上,有时会出现在机器 B 上,并且总是出现在机器 C 上。

    Valgrind 可能会直接指出问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-10
      • 2022-12-01
      • 2012-09-04
      • 2015-10-11
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      相关资源
      最近更新 更多