На MacOSX / PPC, предложения о том, как поймать KERN_PROTECTION_FAILURE в 0x0000000000000000 - PullRequest
1 голос
/ 30 июня 2009

Это клиент MMO в реальном времени, в какой-то случайный момент он падает с скачком до 0, и кадр стека не читается. Журналист аварий (и GDB) сообщит о сбое потока 0:

XC_BAD_ACCESS (SIGBUS)
KERN_PROTECTION_FAILURE at 0x0000000000000000

и

srr0=lr=exception address=0

Как узнать, где происходит эта ошибка?

1 Ответ

0 голосов
/ 30 июня 2009

Если ваш указатель стека (r1) и регистр ссылок сброшены, значит, это выглядит не очень хорошо. Тем не менее, возможно, что некоторые другие регистры могут все еще иметь значение указателя кадра - например, неконечные функции, которые часто используются для перемещения адреса, чтобы они возвращались в / из стека через r0.

Кроме того, есть пара трюков, которые вы можете использовать - при условии, что в адресном пространстве процессов по адресу 0x0 нет ничего сопоставленного (что, по-видимому, относится к ошибке EXEC_BAD_ACCESS), вы могли бы написать простая библиотека предварительной загрузки, которая отображала ноль страницы; что позволит вам добавить точку останова на 0x0; что может дать вам больше информации о том, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...