在Redhat中被SIGBUS(核心转储)杀死的SIGBUS(总线错误)@ 0(0)

时间:2011-04-12 07:16:15

标签: linux gdb core

我有两个帐户在同一台​​机器上完美运行的进程,但是当我将进程复制到其他帐户并运行进程时,我正在获取核心转储。 当我用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

我可以看到打开文件进行日志记录的事情,但是为什么它只在一个帐户中而在另一个帐户中呢?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

Valgrind可能会直接指出你的问题。