EXC_BAD_ACCESS使用ARC和不能跟踪模拟器(EXC_BAD_ACCESS using A

2019-10-17 01:03发布

我一直在为建设一个客户端应用程序,一切都进展顺利,直到我开始收到此错误。 这是一个独特的情况,我已经学会了如何使用仪器和NSZombie不过,我不仅可以在模拟器上运行在iPhone上使用NSZombieEnabled仪器。 我有,因为我使用UIImagePicker拍照的iPhone来调试这个问题和错误发生不久,我拍摄照片后。 我还使用ARC,所以我不能设置释放或保留信息可言,ARC禁止它,所以我怀疑它的双版本或类似的东西。 有2个可能的回答这个问题。

1:有谁知道我是否可以使用Photo Booth的传递图像到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

Answer 1:

如果没有代码示例很难说,但ARC不能完全覆盖所有的基地。 例如,可以让物体时(有委托类)不存在这些EXC_BAD_ACCESS错误,但尝试执行回调委托方法。

更具体地讲,假设我已经创建了一个类viewDidLoad: -姑且称之为ClassA 。 在我的假设情况下,我把我的视图控制器ClassA的代表。 但是,我还没有宣布一个属性ClassA ,所以它没有提到超出范围viewDidLoad:

现在让我们假设ClassA声明,是由我的视图控制器实现的委托方法。 该委托传递的本身回视图控制器在此委托方法的参考。 因为它可能会或可能不会超出范围由这点,BOOM,坏访问错误。 检查的东西,如本,其中对象不存在了,并正在通过其他方法 - 这是一个这样的方式可以ARC失败你;)



Answer 2:

EXC_BAD_ACCESS并不一定意味着一个内存管理问题。 它可以很容易地通过内存损坏或其他种类的错误造成的。

发布崩溃的回溯。



文章来源: EXC_BAD_ACCESS using ARC and can't track on simulator