即使NSZombieEnabled,EXC_BAD_ACCESS(代码= 2,地址= 0x20)

时间:2012-12-15 17:49:53

标签: objective-c ios xcode4.5 lldb

我的应用程序上出现EXC_BAD_ACCESS崩溃,我在可执行程序上启用了NSZombie进行调试。即使NSZombie启用,我仍然会遇到此崩溃。主要嫌疑人是导致此错误的线程(不是主线程)。我在我的代码中做了一些kvo的东西。它似乎来自它。我找不到它导致问题的地方。 这是线程的回溯。有谁能告诉我如何确定问题的原因?任何线索或调试技巧都将不胜感激。

更新:我尝试运行分析仪,程序在分析仪上运行时停止并自行关闭。没有任何消息......只是默默地关闭,录音停止了。我不太擅长查看分析仪,但有人能告诉我在哪里看看吗?

* thread #9: tid = 0x2803, 0x00cfdb3e Foundation`__block_global_4 + 420, stop reason = EXC_BAD_ACCESS (code=2, address=0x20)
    frame #0: 0x00cfdb3e Foundation`__block_global_4 + 420
    frame #1: 0x00c5b9d7 Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:] + 675
    frame #2: 0x00c5b72e Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:] + 63
    frame #3: 0x00cfd994 Foundation`____NSOQDelayedAttachPendingOperations_block_invoke_0 + 98
    frame #4: 0x00c5b9d7 Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:] + 675
    frame #5: 0x00c5b72e Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:] + 63
    frame #6: 0x00c84e7b Foundation`__NSOQDelayedAttachPendingOperations + 156
    frame #7: 0x01615014 libdispatch.dylib`_dispatch_client_callout + 14
    frame #8: 0x01604fd6 libdispatch.dylib`_dispatch_after_timer_callback + 28
    frame #9: 0x01615014 libdispatch.dylib`_dispatch_client_callout + 14
    frame #10: 0x0160c8b7 libdispatch.dylib`_dispatch_source_latch_and_call + 219
    frame #11: 0x01608405 libdispatch.dylib`_dispatch_source_invoke + 322
    frame #12: 0x01606280 libdispatch.dylib`_dispatch_root_queue_drain + 231
    frame #13: 0x01606450 libdispatch.dylib`_dispatch_worker_thread2 + 39
    frame #14: 0x995eee12 libsystem_c.dylib`_pthread_wqthread + 441

1 个答案:

答案 0 :(得分:1)

跨线程使用KVO真的非常危险。在这种情况下,看起来您正在修改线程#9中的值,该值在那里触发KVO消息。但是,如果您的观察者依赖于主线程(例如,它对用户界面执行任何操作,或者它没有对其访问的任何数据进行保护),则您的应用程序将崩溃。

您是否一次通过应用程序一行以查看导致崩溃的行?