【问题标题】:EXC_BAD_ACCESS (code=2, address=0x20) even when NSZombieEnabledEXC_BAD_ACCESS (code=2, address=0x20) 即使当 NSZombieEnabled
【发布时间】:2012-12-15 17:49:53
【问题描述】:

我的应用程序出现 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

【问题讨论】:

  • 您是否尝试过添加exception breakpoint?在调试您的应用程序时,这通常会突出显示导致异常的代码行。不看代码我们不可能诊断出问题的根源,但也许你可以通过异常断点自己识别问题。
  • 调用 nil 块可能会导致这样的崩溃。您可以查看是否可能将 nil 块传递给可能正在调用它的代码。另外,如果通知来自后台线程,您确定您正在安全地处理您的 KVO 观察者吗?也许您可以发布一些可能涉及此 KVO 事件的代码?
  • @Rob:是的,我已经启用了 xcode 中的所有异常断点。对我来说,它显示的是反汇编代码......这就是它停止崩溃的地方。
  • @JesseRusak:我在我的应用程序中使用了所有就地块。所以我猜没有无效的块。
  • 我遇到了类似的问题,似乎也与此 AFNetworking 问题有关:github.com/AFNetworking/AFNetworking/issues/1626

标签: objective-c ios xcode4.5 lldb


【解决方案1】:

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

你有没有一次一行地浏览应用程序,看看是哪一行导致了崩溃?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多