4

私はここでは新人です 。この質問が繰り返されている場合は申し訳ありませんが、他の質問とは少し異なる問題があります。

エラー ログやスタック トレースがなくても、一定の時間間隔が経過するとアプリがランダムにクラッシュします。メモリの問題だと思います。次の質問があります。

1.) スタック トレースを取得する方法 (NSZombie を有効にして NSUnacughtExcpetion ハンドラーを試しました) が機能しませんでした

2.) アプリで頻繁にメモリ警告が表示されます。上記の問題の主な容疑者であるかどうかを確認するにはどうすればよいですか? (私は Leaks を使用しました。4Mb の使用量でアプリがクラッシュするため、メモリ リークが原因でアプリがクラッシュするかどうかはよくわかりません。4MB を超えるヒープ メモリを使用する特定のアプリケーションを知っています。)

3.) アプリがクラッシュする前の iOS でのアプリのメモリ リークの上限は?

4.) この状況で ARC は役に立ちますか?

また、NSLog ステートメントを使用して問題をデバッグしようとしましたが、ランダムにクラッシュするため、この手法を使用して根本原因を検出することは困難です。

どんなアイデアでも、助けていただければ幸いです

4

5 に答える 5

8

エラー ログやスタック トレースがなくても、一定の時間間隔が経過するとアプリがランダムにクラッシュします。メモリの問題だと思います。

メモリの問題であることを確認するには、デバイスを iTunes と同期し、名前に~/Library/Logs/CrashReporter/MobileDevice/が含まれるファイルを探しますLowMemory。アプリ名の横にが表示(jettisoned)されている場合は、メモリの使用量が多すぎるために iOS によって強制終了されたことを示しています。

クラッシュ レポートを残さずにアプリを終了できる他の唯一の方法は、誤って を呼び出しexit()た場合です。

詳細については、「デプロイされた iOS アプリのデバッグ」および「iOS アプリケーションのクラッシュ レポートの理解と分析」を参照してください。

于 2012-06-04T22:00:50.630 に答える
4

確かではありませんが、レジスタを読むと役立つかもしれません。

最初に [例外] タブに移動し、左下隅の + を使用して [例外ブレークポイントを追加] を選択します。 ここに画像の説明を入力

次に、アプリがクラッシュしたら、スレッド 1 の下の「0 objc_exception_throw」をクリックします。 ここに画像の説明を入力

最後に、コンソールに次のように入力します。

  • register read (レジスタのリストを取得する必要があります)

  • po $rax (通常、例外は 'rax' にあります)

    (コンソールに例外出力が表示されるはずです)

お役に立てれば。

于 2014-05-08T12:06:39.690 に答える
3

おそらく、デバイスのメモリが不足していて、シャットダウンしているようです。メモリ警告のデバッグに関するスタックオーバーフローには多くのスレッドがあります。

これは、Instruments ツールを使用する際に何を探すべきかについて少し説明しています。

メモリ警告レベルの取得方法とコードの意味について説明します。

iPhone には固定のメモリ制限はありません。Apple のサポート担当者にこの質問をしたのですが、明確な回答は得られませんでした (おそらく、アルゴリズムが実際にはサードパーティのアプリに厳しい制限を課していないためです)。

そして、はい、ARC は素晴らしいものになる可能性があります。あなたの状況では、すべてのコードを ARC に準拠させるために多くのコードを作り直す必要があるかもしれませんが、ARC は間違いなく便利な機能であり、コーダーによる作業を減らして、メモリの問題が少ないプログラムを生成できます (より多くの時間を割くことができます)。他の問題を修正してください!)

于 2012-06-04T21:10:59.677 に答える
1

インストゥルメントをお勧めします https://developer.apple.com/library/mac/#documentation/developertools/conceptual/InstrumentsUserGuide/AboutTracing/AboutTracing.html

于 2012-06-04T20:55:09.503 に答える