Получение SIGBUS (ошибка шины) @ 0 (0) уничтожено SIGBUS (ядро сброшено) в Redhat - PullRequest
1 голос
/ 12 апреля 2011

У меня есть процесс, который отлично работает на одной машине в двух учетных записях, но когда я копирую процесс в другую учетную запись и запускаю процесс, я получаю дамп ядра когда я запускаю процесс с помощью 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 ]

1 голос
/ 13 апреля 2011

Любой дамп ядра внутри malloc всегда указывает на повреждение кучи, а повреждение кучи в общем-то подлый: он может никогда не отображаться на компьютере A, иногда отображаться на компьютере B и всегда отображаться на компьютере C.

Valgrind , скорее всего, укажет вам прямо на проблему.

1 голос
/ 12 апреля 2011

Вы можете получить SIGBUS из доступа к памяти без выравнивания.Используете ли вы что-то вроде mmap, областей совместно используемой памяти или что-то подобное?

...