Как диагностировать KERN_PROTECTION_FAILURE - PullRequest
7 голосов
/ 05 августа 2010

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

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 и ведение журнала стека. Пробежал через статический анализатор, чтобы убедиться, что все объекты удерживаются и освобождаются должным образом, хотя у меня есть ощущение, что это все еще связано с удержанием / освобождением.

Мысли

1 Ответ

2 голосов
/ 07 августа 2010

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

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

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

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

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