デバッグ方法がわからない EXC_BAD_ACCESS エラーでコードがクラッシュしています。
これはコードです:
NSUInteger lineCount = self.lineBeginnings.count;
NSUInteger lineBeginnings[lineCount];
[self.lineBeginnings getIndexes:lineBeginnings maxCount:lineCount inIndexRange:nil];
最後の行でクラッシュしEXC_BAD_ACCESS (code=2, address=0x...)
ます。
上記の 2 行に注意してください。self.lineBeginnings を完全に読み取ることができますが、デバッガーでは次のようになります。
(lldb) p [self lineBeginnings]
error: Trying to put the stack in unreadable memory at: 0x7fff5d15e310.
(lldb) p _lineBeginnings
(NSMutableIndexSet *) $1 = 0x0000610000059b90
(lldb) po _lineBeginnings
[no Objective-C description available]
また、lineBeginnings は GUI スコープ ブラウザに正しく表示されず (他のすべての変数は表示されます)、「lineBeginnings のメモリを表示」しようとすると、完全に空のメモリ ビューが表示されます。
変数は強力な @property として保存されます。lineBeginnings
これは、アプリ デリゲートの init メソッドで作成された可変インデックス セットであり、アプリの実行中に削除されることはありません。それに書き込むバックグラウンド操作キューがありますが、dispatch_sync(dispatch_get_main_queue())
.
これをさらにデバッグする方法がわかりませんか?再現するのは難しいです。最大 1 分間ウィンドウのサイズを変更する必要があります (これにより、バックグラウンド キューで lineBeginnings 変数が再作成されます。このプロセスには、180 MB のデータが与えられた場合に約 5 分かかります)。このクラッシュが発生します。
バッファオーバーランか何かのように見えますか?どうすればそれを追跡できますか?
ファイルのソース コードは次のとおりです: https://gist.github.com/abhibeckert/7128740 (クラッシュは 254 行にあります)。