EXC_BAD_ACCESS使用ARC并且无法在模拟器上跟踪
我一直在为客户端构建应用程序,一切都很顺利,直到我开始出现此错误。这是一个独特的情况,我已经学会了如何使用乐器和NSZombie,但是我不能在模拟器上使用iPhone上的NSZombieEnabled来运行乐器。我必须在iPhone中调试此问题,因为我使用UIImagePicker拍摄照片,并在拍摄照片后不久发生错误。我也使用ARC,因此我无法设置发布或保留信息,ARC禁止它,所以我怀疑它是双发布还是类似的东西。这个问题有两个可能的答案。EXC_BAD_ACCESS使用ARC并且无法在模拟器上跟踪
1:有谁知道我是否可以使用照相亭将图像传递到UIImagePicker?如果我可以通过相机屏幕,我可以使用乐器和NSZombie。
2:是否有一种方法来检测哪些行会导致错误,而不用重构或注释掉使用iPhone的代码?有没有人知道有效的方法来追踪iPhone上的bad_acces?
请记住,我正在使用ARC,无法在模拟器上进行调试。如果我拿出UIImagePicker控制脚本,这个错误不会发生,所以我将它缩小到我的CameraViewController类中。恐怕由于先前存在的合同,我无法发布任何代码,您必须成为员工才能查看源代码。
对不起,关于有限的信息,但真的我正在寻找关于调试的答案,而不是直接解决我的确切代码问题。
要张贴回溯(我认为)
(gdb) bt
#0 0x339737e4 in objc_msgSend()
#1 0x31b30140 in -[UIApplication sendAction:to:from:forEvent:]()
#2 0x31b300e0 in -[UIApplication sendAction:toTarget:fromSender:forEvent:]()
#3 0x31b300b2 in -[UIControl sendAction:to:forEvent:]()
#4 0x31b2fe04 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]()
#5 0x31b30452 in -[UIControl touchesEnded:withEvent:]()
#6 0x31b2eddc in -[UIWindow _sendTouchesForEvent:]()
#7 0x31b2e756 in -[UIWindow sendEvent:]()
#8 0x31b299fe in -[UIApplication sendEvent:]()
#9 0x31b29336 in _UIApplicationHandleEvent()
#10 0x3026c04a in PurpleEventCallback()
#11 0x3443fce2 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__()
#12 0x3443fca6 in __CFRunLoopDoSource1()
#13 0x3443256c in __CFRunLoopRun()
#14 0x34432276 in CFRunLoopRunSpecific()
#15 0x3443217e in CFRunLoopRunInMode()
#16 0x3026b5f2 in GSEventRunModal()
#17 0x3026b69e in GSEventRun()
#18 0x31ad0122 in -[UIApplication _run]()
#19 0x31ace12e in UIApplicationMain()
#20 0x000034ce in main (argc=1, argv=0x2ffff75c) at /Users/Andrew/Documents/Developing/Xcode Projects/ProjectSVN/Project/trunk/ProjectInterface/ProjectInterface/main.m:16
没有代码示例很难说,但ARC并不完全覆盖您的所有基础。例如,当对象(具有委托的类)不存在时,可能会得到这些EXC_BAD_ACCESS错误,但尝试执行回调委托方法。
更具体地说,假设我在viewDidLoad:
中创建了一个类 - 我们称之为ClassA
。在我的假设情况下,我将我的视图控制器设置为ClassA
的代表。不过,我还没有申报财产ClassA
,所以没有提及它超出viewDidLoad:
的范围。
现在让我们假设ClassA
声明由我的视图控制器实现的委托方法。此代理将此自身的引用传递回此代理方法中的视图控制器。因为它可能会或可能不会超出范围,BOOM,访问错误不好。检查诸如此类的东西,哪些对象不再存在,并且正在传递给其他方法 - 它就是ARC可以让你失败的一种方式;)
这听起来非常接近我的问题,我是xCode的新手,所以我仍然很缺乏经验。指向一个对象并连续传递给3个独立的类。也许这是因为分配指针的类被释放并且指针被破坏了吗?我可以传递实际的对象吗?不是指针? – Xav 2012-07-20 17:03:06
我怀疑这一点。如果委托没有连接起来,它可能不会崩溃,只会有没有回调功能。确保当你传递一个对象到许多地方,它坚持超越了它正在做的这个方法。 – bgoers 2012-07-20 17:32:26
好吧,这实际上是确切的问题,是新的xCode我已经初始化5个不同的类没有属性在我的方法在我的的viewController。我所做的只是添加类和Booyah的属性!感谢大家帮助我,从这篇文章中学到了很多东西。 – Xav 2012-07-20 19:13:19
EXC_BAD_ACCESS
并不一定意味着一个内存管理问题。它可能很容易造成内存损坏或其他类型的错误。
发布崩溃的回溯。
在模拟器上,您可以(暂时)更改代码以从中选择照片库,而不是 - 你应该能够调试它然后(这也将有助于缩小你的bug的地方:) – deanWombourne 2012-07-20 16:47:42
它打开照片库,以取代在模拟器上的相机,我怎么能添加一张照片? – Xav 2012-07-20 17:27:32
将图像拖放到模拟器上 - 这将在Safari中打开。长按图片,你可以选择保存。 – deanWombourne 2012-07-20 17:28:56