【发布时间】:2012-01-21 03:00:00
【问题描述】:
我正在使用 ARC 开发 iOS5 应用程序,我开始遇到一些我无法弄清楚的随机 EXEC_BAD_ACCESS 崩溃。随机是指它非常不可预测:有时可能需要很长时间才能崩溃,有时可能很短.而且也没有一个特定的按钮/表格单元/等。触发崩溃。每次用户交互都可能使应用程序崩溃,但您不能重复崩溃。
我尝试打开 NSZombie 以及一些 malloc 调试器工具。在 Instruments 中,崩溃错误为:Objective-C 消息已发送到地址为 0x10bd1b40 的已释放对象(僵尸)。引用计数日志的最后一部分是这样的:
475 CoursesFirstViewController Release 2 02:23.253.631 0 UIKit -[UINibDecoder finishDecoding]
476 CoursesFirstViewController Release 1 02:23.253.838 0 Foundation -[NSAutoreleasePool drain]
477 CoursesFirstViewController Zombie -1 02:35.752.420 0 Foundation objectHash
2、1、-1 是引用计数。我不知道为什么它会跳过 0 并下降到 -1,从而使程序崩溃(除最后一个之外的所有条目都有连续的引用计数)。我也不知道 objectHash 是什么。
我的应用程序包含多个功能,可作为主屏幕上的图标访问。 CoursesFirstViewController 是功能之一。总是,CoursesFirstViewController 和 objectHash 使应用程序崩溃,即使我在其他地方也是如此。 (上面的日志就是这种情况:我在 02:23 离开 CoursesFirstViewController(从而返回到我的应用程序的主屏幕),但 12 秒后,当我在其他一些功能中时,应用程序崩溃了)我只需要进入CourseFirstViewController,弄乱一会,然后去别的地方继续使用,过一会就崩溃了。
我现在真的对这个问题很生气。我已经搜索了 SO 和 Google 很长一段时间,但找不到解决方案。任何帮助将不胜感激。谢谢!!
【问题讨论】:
-
您是否设法获得了几次出现的堆栈跟踪,或者它是您唯一拥有的?
-
@zneak 抱歉,什么是堆栈跟踪?是 NSLog(@"%@", [NSThread callStackSymbols]); ?每次崩溃日志的最后几行都像上面那样。
-
在 Instruments 中,从菜单栏中选择
View > Extended Detail。然后,当您点击引用计数日志中的某个事件时,扩展的详细视图将向您显示事件发生时的调用堆栈(堆栈跟踪)。 -
@robmayoff 是的,我已经检查过了,但没有看到任何特别有用的东西。最后几个调用是 objectHash、hashProbe、[NSConcreteHashTable rehashAround]、[NSConcreteHashTable removeItem] 等。
标签: objective-c ios5 automatic-ref-counting exc-bad-access