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

Мысли?

7
задан Sheehan Alam 5 August 2010 в 02:30
поделиться

1 ответ

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

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

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

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

2
ответ дан 7 December 2019 в 18:38
поделиться