在IOS应用程序上对神秘的EXC_BAD_ACCESS进行故障排除

时间:2011-11-03 14:10:51

标签: ios ipad exc-bad-access

当我运行IOS应用程序时(在IPad模拟器或真实设备上),我收到EXC_BAD_ACCESS错误。通常情况下我对此进行故障排除没有问题,但错误来自系统内部,并且在搜索之后我就陷入了如何继续进行故障排除的过程中。

有人能给我一些想法,或者如何解决这个问题吗?我正在处理一个庞大的项目,并且没有从错误消息中得到任何指示,我不知道从哪里开始。

谢谢!

#0  0x0230609b in objc_msgSend ()
#1  0x0206943d in CFRetain ()
#2  0x0214e9c0 in +[__NSArrayI __new::] ()
#3  0x020a200a in -[__NSPlaceholderArray initWithObjects:count:] ()
#4  0x009aa2dc in -[CALayerArray copyWithZone:] ()
#5  0x02164bd9 in -[NSObject copy] ()
#6  0x016bb0fa in -[UIView dealloc] ()
#7  0x02306e4d in _objc_rootRelease ()
#8  0x0206e435 in CFRelease ()
#9  0x0214fe94 in -[__NSArrayM dealloc] ()
#10 0x02306e4d in _objc_rootRelease ()
#11 0x02306e10 in objc_release ()
#12 0x02307c60 in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
#13 0x02096ed8 in _CFAutoreleasePoolPop ()
#14 0x012619f9 in -[NSAutoreleasePool release] ()
#15 0x0168af78 in _UIApplicationHandleEvent ()
#16 0x035dffa9 in PurpleEventCallback ()
#17 0x021361c5 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#18 0x0209b022 in __CFRunLoopDoSource1 ()
#19 0x0209990a in __CFRunLoopRun ()
#20 0x02098db4 in CFRunLoopRunSpecific ()
#21 0x02098ccb in CFRunLoopRunInMode ()
#22 0x016872a7 in -[UIApplication _run] ()
#23 0x01688a9b in UIApplicationMain ()
#24 0x0020f2a4 in main at /..../main.m:17

2 个答案:

答案 0 :(得分:1)

从堆栈跟踪中,您可以解决以下问题:

1)这与自动释放池有关

2)正在发布阵列

3)我猜这个数组包含一些UIViews(可能)

4)作为UIView dealloc的一部分,出现了可怕的错误

那不是那么有用,抱歉:)

堆栈跟踪开始时的自动释放告诉您几乎可以肯定的是,您没有保留足够的内容:)

是否存在发生此错误的特定视图?

答案 1 :(得分:1)

我的第一个猜测是你发布了一个已经自动释放的视图。例如:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.view addSubview:myButton]
[myButton release];

你也可以两次发布一个视图,或者发布一个超视图消失的视图。

如果可能,您可以考虑将项目移至ARC,因为它解决了大多数(但不是全部!)这些问题。否则,调试它的最佳选择可能是#ifdef你的部分代码,直到崩溃消失,然后重新放入代码,直到它再次崩溃。