2010-08-05 220 views
4

我得到了一个有趣的崩溃,我永远不能似乎复制在模拟器上:如何诊断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 0x00 + 25248 
19 UIKit       0x32325e10 0x00 + 19984 
20 StockTwits      0x00002fd4 0x1000 + 8148 
21 StockTwits      0x00002fa4 0x1000 + 8100 

我NSZombies启用以及堆栈记录。通过静态分析器来确保所有对象都被保留并正确释放,尽管我感觉它仍然与保留/释放有关。

想法?

+1

是不是你传递一个值为8(0x00000008)的int而不是一个指针? – mvds 2010-08-05 02:34:32

+0

你能解释一下吗?有趣的... – 2010-08-05 02:35:28

+1

看到这个问题的更多信息:http://stackoverflow.com/questions/1282428/whats-the-difference-between-kern-invalid-address-and-kern-protection-failure – mvds 2010-08-05 02:36:17

回答

0

您必须取消引用NULL指针,除此之外,崩溃不会发生。静态分析器是一个很好的工具,可以提示您做错事情的提示。但是,它没有发现错误并不意味着你的程序没有bug。另外打开僵尸并不总是有帮助。有时候这只是一个简单的小疏忽。

模拟器没有显示这个问题的事实并没有说太多。最后,它是另一台具有不同处理器和不同架构的机器。在某些平台上,虚假代码在一个平台上运行良好,但在另一平台上崩溃。

你应该重新象征你堆栈跟踪并仔细看看它正在崩溃的函数。如果你想获得更多帮助,最好在这里发布一些代码。

还有一个提示:这些问题通常分散在多种方法中。分析仪一次只能看到一种方法。在进入之前,你应该看看碰撞方法中的对象发生了什么。

+0

我怎么能-symbolicate? – 2010-08-07 01:43:44

+1

最简单的方法是根本不用编译进行优化。进行一个包含调试符号的调试配置版本。对于符号化你可能会在这里找到答案:http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports – 2010-08-07 09:07:01

+0

对于未来的读者,取消引用NULL指针并不是这次崩溃发生的唯一原因,因为它在Apple的文档中声明:“该进程尝试访问无效内存,或者试图以内存保护级别所不允许的方式访问内存(例如,写入只读内存)。”此外,[本文](http ://stackoverflow.com/questions/23717889/exc-bad-access-kern-protection-failure)由于堆栈溢出而显示此异常类型。 – BridgeTheGap 2017-01-04 09:07:38