2012-07-09 52 views
1

我有一个有害的EXC_BAD_ACCESS错误。我已启用僵尸跟踪,但不是产生特定的堆栈跟踪,程序总是停在主要在 return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));EXC BAD访问主

有谁知道为什么我没有一个有意义的堆栈跟踪?该应用程序使用核心数据,并且大部分核心数据活动都在performBlockAndWait方法中进行说明 - 这可能与它有关吗?

我还有一个来自NSZombieEnabled的日志消息,说*** -[_PFArray release]: message sent to deallocated instance 0x395d0fe0。有没有什么方法可以找出最初分配给日志消息地址的内容?

谢谢

+0

每当你引用一个释放对象时,就会发生这种情况。由于Objective-C的工作方式,调试器不会停止在违例的位置。您必须启用僵尸并在Objective-C异常中设置断点以获取更多信息。 – 2012-07-09 11:56:32

回答

0

是的。用他在乐器上的乐器运行你的应用程序。选择僵尸工具并执行使您的应用崩溃的确切步骤。僵尸工具仅适用于模拟器,因为Mac上的内存比iOS设备上的多。

+0

乔治 - 感谢您的提示 - 它工作完美,至少现在我知道错误发生在核心数据内部。所讨论的对象在'newFetchedRowsForFetchPlan_MT'中获取malloc'ed,然后由'[NSSQLCore objectsForFetchRequest]'和[NSManagedObjectContext executeFetchRequest:error]'两次自动释放。时间让我去进一步挖掘 - 再次感谢 – drew 2012-07-09 11:52:30

+0

很高兴帮助。它也可能有助于将崩溃的代码封装在try-catch块中并打印出异常。它也防止它崩溃,这总是一件好事。 – George 2012-07-09 11:59:36

0

你可以检查this关于崩溃的教程,并找出该怎么做。密切关注这部分内容:

当程序被抓到做一些事情时发生异常 应该没有做过。你现在看到的是 这个例外的后果:应用程序做错了,抛出了异常, ,Xcode显示结果。理想情况下,您希望看到 正是在发生异常的位置。幸运的是,您可以使用异常 断点告诉 Xcode暂时暂停程序。断点是一个调试工具,可在特定时刻暂停程序 。