Как диагностировать KERN_PROTECTION_FAILURE

Я получаю интересный сбой, который я никогда не смогу воспроизвести на симуляторе:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3212e86c 0x3212c000 + 10348
1   StockTwits                      0x00016b06 0x1000 + 88838
2   Foundation                      0x30718422 0x306db000 + 250914
3   Foundation                      0x307183a4 0x306db000 + 250788
4   CFNetwork                       0x30933e74 0x30923000 + 69236
5   CFNetwork                       0x30927b70 0x30923000 + 19312
6   CFNetwork                       0x30927e62 0x30923000 + 20066
7   CFNetwork                       0x30927a60 0x30923000 + 19040
8   CFNetwork                       0x30927a12 0x30923000 + 18962
9   CFNetwork                       0x30927990 0x30923000 + 18832
10  CFNetwork                       0x3092790e 0x30923000 + 18702
11  CoreFoundation                  0x30352a86 0x302e1000 + 465542
12  CoreFoundation                  0x30354768 0x302e1000 + 472936
13  CoreFoundation                  0x30355504 0x302e1000 + 476420
14  CoreFoundation                  0x302fe8e4 0x302e1000 + 121060
15  CoreFoundation                  0x302fe7ec 0x302e1000 + 120812
16  GraphicsServices                0x31a776e8 0x31a74000 + 14056
17  GraphicsServices                0x31a77794 0x31a74000 + 14228
18  UIKit                           0x323272a0 0x32321000 + 25248
19  UIKit                           0x32325e10 0x32321000 + 19984
20  StockTwits                      0x00002fd4 0x1000 + 8148
21  StockTwits                      0x00002fa4 0x1000 + 8100

У меня включен NSZombies, а также ведение журнала стека. Просмотрите статический анализатор, чтобы убедиться, что все объекты сохраняются и освобождаются должным образом, хотя у меня есть ощущение, что это все еще связано с удержанием / освобождением.

Мысли?


person Sheehan Alam    schedule 05.08.2010    source источник
comment
Разве вы не передаете где-нибудь int со значением 8 (0x00000008) вместо указателя?   -  person mvds    schedule 05.08.2010
comment
Не могли бы вы объяснить еще немного? Интересный...   -  person Sheehan Alam    schedule 05.08.2010
comment
См. Этот вопрос для получения дополнительной информации: stackoverflow.com/questions/1282428/   -  person mvds    schedule 05.08.2010


Ответы (1)


Вы должны разыменовывать NULL-указатель, иначе сбой не произойдет. Статический анализатор - хороший инструмент для подсказок о том, что вы делаете неправильно. Однако отсутствие ошибки не означает, что ваша программа не содержит ошибок. Также включение зомби не всегда помогает. Иногда это просто небольшая оплошность.

Тот факт, что симулятор не показывает эту проблему, не говорит о многом. В конце концов, это другая машина с другим процессором и другой архитектурой. Бывают случаи, когда ложный код хорошо работает на одной платформе, но дает сбой на другой.

Вам следует повторно обозначить свою трассировку стека и внимательно изучить эту функцию, в которой происходит сбой. Если вам нужна дополнительная помощь, вероятно, лучше всего опубликовать здесь часть кода.

Еще один совет: эти проблемы часто распространяются на несколько методов. Анализатор видит только один метод за раз. Вы должны посмотреть, что случилось с объектами в вашем методе сбоя, ДО того, как он был введен.

person Max Seelemann    schedule 07.08.2010
comment
Самый простой способ - вообще не компилировать с оптимизацией. Создайте сборку конфигурации отладки, содержащую символы отладки. Для символизации вы можете найти ответ здесь: stackoverflow.com/ questions / 1460892 / - person Max Seelemann; 07.08.2010
comment
Для будущих читателей разыменование указателя NULL - НЕ единственная причина, по которой происходит сбой, как указано в документе Apple The process attempted to access invalid memory, or it attempted to access memory in a manner not allowed by the memory's protection level (e.g, writing to read-only memory). Кроме того, этот пост показывает этот тип исключения из-за переполнения стека. - person funct7; 04.01.2017