これに 2 日間費やしましたが、まだクラッシュの原因を見つけることができません。
解放されたオブジェクトにアクセスしようとすることに関係があることは知っていますが、どのアクセスまたはどのオブジェクトかはわかりません。
EXC_BAD_ACCESS のソースを見つけようとしてグーグルで検索するたびに、人々は NSZombies の使用を提案します。問題は、(環境変数を介して xcode で、または ObjectAlloc プロパティを介してインストゥルメントで) ゾンビを有効にすると、プログラムは通常クラッシュせず、ゾンビは何も報告しません (ログには何も表示されず、何もフラグが立てられません)。楽器)。NSZombie に欠けているものはありますか?
xcode のデバッガーと ObjectAlloc からの情報をインストゥルメントで利用しようとしましたが、すべての情報は非常に不可解であり、実際には役に立ちません。
Objective-C 例外で停止するようにデバッガーを設定しました。それが行われると、これは示されているコール スタックです。
0 objc_msgSend
1 ??
2 -[UITableViewCell removeFromSuperView]
3 -[UIView dealloc]
... etc ...
まず、「1??」ってどういうこと?? クエスチョンマークの意味は?第二に、コード内でこれが呼び出された場所をどのように知ることができますか? 記載されているすべての操作は一般的すぎます (たとえば、UIView の dealloc ですが、どの UIView で、どこで?)。
また、例外が発生すると、コードが何をするのかを理解するために何時間も費やさない限り、アセンブリ コードを指します。私はいくつかのアセンブリを知っていますが、もっと良い方法が必要です...よね?
例外が発生する前にコードで実行された最後の行について、意味のある情報を取得する方法はありますか?
いくつかの NSLog とブレークポイントを散らしてみましたが、ナビゲーション コントローラーからビュー コントローラーをポップした後にクラッシュが発生するため、あまり役に立ちません。ブレークポイントを配置するすべての場所で、ブレークポイントに問題なく到達します (クラッシュ後にブレークするポイントが見つかりません)。例外が発生するのは、デバッガーで「続行」したときだけです。クラッシュがコードの外で発生したかのように見えるので、どこでそれを処理すればよいかわかりません。
私は自分のコードを調べて、すべてのメモリ管理規則に準拠していることを再確認しました (少なくとも私の知る限りでは)。それは非常に微妙なものだと確信していますが、それを見つけることができないようです。
NSZombie を使用せずにそのようなバグを見つける方法を誰かが知っている場合は、共有してください。
ありがとう。