我有两个帐户在同一台机器上完美运行的进程,但是当我将进程复制到其他帐户并运行进程时,我正在获取核心转储。 当我用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
我可以看到打开文件进行日志记录的事情,但是为什么它只在一个帐户中而在另一个帐户中呢?
答案 0 :(得分:1)
您可以从未对齐的内存访问中获取SIGBUS。您使用的是mmap,共享内存区域或类似内容吗?
答案 1 :(得分:1)
malloc中的任何核心转储总是表示堆损坏,并且堆损坏一般是偷偷摸摸的:它可能永远不会出现在机器A上,有时会显示在机器B上,并且总是显示在机器C上。
Valgrind可能会直接指出你的问题。