2011-10-17 8 views
0

iOSアプリでランダムに発生するクラッシュを修正しようとしています(EXC_BAD_ACCESS(SIGSEGV)KERN_INVALID_ADDRESS、0xe104019e)。アプリケーションは同時にNSURLConnectionでデータをロードしたり、多数の入れ子になったUIViewを使って複雑なレイアウトを再描画したり、UIImageを描画したり、ダウンロードしたファイルをローカルディスクにキャッシュしたり、ローカルキャッシュなどの可用性を調べたりするなど、いくつかのスレッドに分けられ、クラッシュが発生したとき、私は正確なステップがそれに先行していたことを完全に混乱させます。オーダーされたコールスタック - Instruments Time Profiler?

スレッドに分散された発生順に呼び出しスタックを追跡し、クラッシュ前の1-5msの間にどのオブジェクトメソッドが呼び出されたかを知る方法を使用したい場合は、クラッシュを生成するバグを特定できます。楽器での時間プロファイラは、多くの詳細と追従性のこの種を提供していますが、サンプリングされたコールスタックはランダムな順序で提示されているように見える一見

- または多分私はそれが間違って取得...

がありますどのような実行の順序で正確に起こるか教えてくれる方法?

答えて

0

1)ゾンビを有効にして実行し、すべてのコンパイラとスタティックアナライザの警告を削除しました。

2)共有データを適切に保護していないスレッドの問題である可能性があります。

楽器はスレッドのソート/フィルタリングに関して非常に強力ですが、達成しようとしているものに対して正確なテンプレートはありません。

小さなオブジェクト・タイプのコレクションに問題を減らすことができる場合は、割り振り計器を追加して参照カウント記録を使用可能にすると、参照カウントに基づいて実行を続行できます。

+0

ありがとう - 確かに私はスレッドの問題を疑う。私はiOS5.0と自動参照カウント(ARC)を使って作業を追加するのを忘れていました。残念ながらゾンビは役に立たなかった。私は前にそれらを使ってみました... – Greg

+0

@Greg ARCは、すべてのインスタンスに対して参照カウントを使用しています。コンパイラは、必要に応じてinc/dec保持カウントを呼び出すだけです... ARCを使用してコンパイルされたプログラムであっても、私の提案がうまくいくと思います(場合によってはARCがrefカウントサイクルを結合することも可能です)。そうじゃないの? – justin

関連する問題