Отладка SIGBUS на x86 Linux

Что может вызвать SIGBUS (ошибка шины) на универсальном x86 приложении пространства пользователя в Linux? Все обсуждение, которое я был в состоянии найти онлайн, расценивает ошибки выравнивания памяти, который от того, что я понимаю, действительно не относится к x86.

(Мой код работает на Жеоде, в случае, если существуют любые соответствующие определенные для процессора причуды там.)

18
задан Josh Kelley 18 January 2010 в 20:58
поделиться

4 ответа

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

Лучше всего использовать отладчик для определения команды ошибки (SIGBUS синхронизирован), и пытаться увидеть, что он пытался сделать.

14
ответ дан 30 November 2019 в 06:39
поделиться

Общая причина ошибки шины на X86 Linux пытается разымевать то, что не совсем указатель, или является диким указателем. Например, не удалось инициализировать указатель или присвоение произвольного целого числа к указателю, а затем попытка разымевать, он обычно изготавливает либо ошибку сегментации, либо ошибку шины.

Выравнивание применяется к x86. Несмотря на то, что память на X86 является байтом-адресуемым (так что вы можете иметь указатель Char на любой адрес), если у вас есть например, указатель на 4-байтовое целое число, этот указатель должен быть выровнен.

Вы должны запустить вашу программу в GDB и определить, какой доступ к указателю генерирует ошибку шины для диагностики проблемы.

-1
ответ дан 30 November 2019 в 06:39
поделиться

О да, есть еще один странный способ получить sigbus.

Если ядро ​​не удается на странице в кодовой странице из-за давления памяти (убийца OOM должна быть отключена) или не удалась запрос IO, SIGBUS.

4
ответ дан 30 November 2019 в 06:39
поделиться

SIGBUS может произойти в Linux в течение многих причин, отличных от неисправностей выравнивания памяти - например, если вы пытаетесь получить доступ к области MMAP , за конец сопоставленного файла.

Вы используете что-нибудь вроде MMAP , общие регионы памяти или аналогичные?

21
ответ дан 30 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: