我有一个iPhone SDK应用程序,其中有几个视图在用户创建内容时出现和消失。在设备上使用该应用程序一段时间后,我遇到以下崩溃:
Program received signal: “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x33369ebc in objc_msgSend ()
#1 0x320e5248 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded] ()
#2 0x338b4a14 in -[NSObject performSelector:withObject:] ()
#3 0x320e5098 in -[UIAnimator stopAnimation:] ()
#4 0x320e4b7c in -[UIAnimator(Static) _advance:] ()
#5 0x320e4a34 in LCDHeartbeatCallback ()
#6 0x34350e60 in HeartbeatVBLCallback ()
#7 0x332e91c0 in IOMobileFramebufferNotifyFunc ()
#8 0x316532f8 in ?? ()
#9 0x33866b50 in __CFMachPortPerform ()
#10 0x338ae52a in CFRunLoopRunSpecific ()
#11 0x338adc1e in CFRunLoopRunInMode ()
#12 0x3434e1c8 in GSEventRunModal ()
#13 0x32002c30 in -[UIApplication _run] ()
#14 0x32001230 in UIApplicationMain ()
#15 0x00002ff8 in main (argc=1, argv=0x2ffff550) at /Developer/svn/MyCompany/iPhone/MyApplication/Other Sources/main.m:14
从跟踪记录中可以看出,唯一提到我的代码的地方是对main函数的调用。
我已经从Xcode运行了Build和Analyze,并且还设置了从终端运行clang分析器来分析我的项目,但是这两种方式都找不到代码中的任何问题。我正在使用一个非常新的iOS SDK(我还没有下载4.1版本,但我使用的那个是在4.1版本之前发布的)。
此外,我已经在模拟器上使用Instruments运行了应用程序,而且应用程序没有内存泄漏。
我即将尝试使用NSZombieEnabled
变量,看看是否能找到问题,但问题是我需要使用应用程序30至40分钟左右才会崩溃,我怀疑NSZombieEnabled
甚至无法帮助我找到这个问题。
似乎我看到的崩溃是当模态视图调用父视图控制器中的委托时发生的。然后父视图控制器会执行一些处理操作,然后关闭模态视图控制器。在崩溃中有一些关于动画和滚动视图的引用,但我不确定我可能会做什么导致出现这些问题。有人有任何建议吗?
编辑:我已经将NSZombieEnabled
标志放入应用程序中,在设备上,控制台出现了以下消息:
2010-09-11 17:10:33.970 MyApplication[9321:207] ***
-[MyViewController respondsToSelector:]: message
sent to deallocated instance 0x7489480
据我了解,我在我的所有类的dealloc中将应用程序使用的委托设置为nil,所以我不知道接下来该从哪里开始查找。我尝试在此上使用 pid地址命令,但它说找不到该进程。我尝试了9321、9321:207和207。另外,如果我尝试使用变量,则程序无法在设备上运行,我会在控制台中得到一堆无法创建堆栈日志目录消息和程序崩溃。
顺便说一下,我无法使用Instruments中的僵尸检查,因为它似乎无法与设备一起使用,而且我无法在模拟器中出现相同的崩溃。