我有一个罕见的namespace)::AutoreleasePoolPage::pop(void*) (匿名在游泳池排水系统崩溃)。据我所知,它是由自动释放池拥有的某个对象过度释放造成的。
我尝试使用NSZombieEnabled = YES,并使用带有僵尸跟踪器的工具。这些错误是不可复制的。控制台中没有记录过释放的消息,僵尸跟踪器不显示任何僵尸警报。但当我摘下这些旗子时,坠机事件经常会再次发生。有人看到过类似的行为吗?
还有其他方法可以轻松地调试吗?我正在使用OS10.8.5中的Xcode 5.0.1。我正在粘贴以下崩溃的线程跟踪:
例外类型: EXC_BAD_ACCESS (SIGSEGV)
例外代码: EXC_I386_GPFLT
应用程序特定信息: objc_msgSend()选择器名称: release
0 libobjc.A.dylib 0x00007fff8b3040a3 objc_msgSend +35 1 com.apple.CoreFoundation 0x00007fff855d086f CFRelease + 591 2 com.apple.CoreFoundation 0x00007fff856028a9 -__NSDictionaryM dealloc + 249 3 libobjc.A.dylib 0x00007fff8b30665a (匿名名称空间)::AutoreleasePoolPage::pop(void*)+ 502 4 com.apple.ist.istcore 0x000000010fb91d82 -SomeFileOperation main + 117 5 NSThread__main + 1318 com.apple.Foundation 0x00007fff81f2070b 6 libsystem_pthread.dylib 0x00007fff86389899 _pthread_body + 138 7 libsystem_pthread.dylib 0x00007fff8638972a _pthread_start + 137 8 libsystem_pthread.dylib 0x00007fff8638dfc9 thread_start + 13
提前谢谢。
发布于 2013-12-02 11:48:11
[__NSDictionaryM dealloc]
一本字典正在被取消分配。
CFRelease
当字典被解除分配时,每个键和值都会得到一条release消息。
但是,字典中的一个对象已经被解除分配,这意味着发送另一个release消息会导致非法访问。
检查字典中的键/值,您正在过度释放其中一个键/值。我建议您也执行一个完整的项目清洁,然后深入分析(请参阅Project菜单)。在大多数情况下,这将帮助您找到bug。
您还可以向NSDictionary dealloc添加一个符号断点,等待它触发,然后使用调试器检查内部数据的状态。
https://stackoverflow.com/questions/20327085
复制相似问题