2

アプリケーションで 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
4

1 に答える 1

1

スレッド間で KVO を使用するのは非常に危険です。この場合、スレッド #9 の値を変更しているように見え、そこで KVO メッセージをトリガーしています。ただし、オブザーバーがメイン スレッド内にあることに依存している場合 (たとえば、ユーザー インターフェイスで何かを実行する場合や、オブザーバーがアクセスするデータを保護していない場合)、アプリはクラッシュします。

一度に 1 行ずつアプリをステップ実行して、クラッシュの原因となっている行を確認しましたか?

于 2014-01-06T01:12:30.407 に答える