2009-04-23 1 views
4

私のコードで起こっている深刻なばかげたバグをキャッチしています。問題は、バグが完全にランダムで、アプリケーションの実行時間の9分または30分のいずれかに発生する可能性があることです。私は先に進んで、素晴らしいPLCrashReporterをプロジェクト(http://code.google.com/p/plcrashreporter)に追加しました。これは簡単なバグではうまくいきます。また、疑問があるときは、〜/ Library/Logs/CrashReporter/MobileDevice /にあるクラッシュログに移動し、クラッシュログでsymbolicatecrashを実行します。この+ GDBは、私が今直面しているバグを除いて、最終的にはバグを捕まえることになります。iPhoneアプリケーションがクラッシュしていて、.crashログファイルを残さないようにしました。

このバグの性質上、アップルのクラッシュログがストレージに正しく書き込まれないことがあります。私はiTunesと私のiPhoneまたはiPod touchを同期すると、私のアプリでsymbolicatecrashを実行するとき、これは示しています

sf$ symbolicatecrash foo.crash 
No crash report version in foo.crash at /usr/local/bin/symbolicatecrash line 741. 

それは私のアプリケーションがすべてでクラッシュレポートを残し、そしてによるメモリの問題に出ていない可能性があります。私は実際にapplicationWillTerminateを見ます:私のApp Delegateで終了する前にNSLogステートメントを実行しています。しかし、ObjectAllocでアプリケーションを実行した後、私のアプリケーションは2.08MBを超えることはありません。私が適切な結果を読んでいるのであれば、私は試運転の全期間を通して28MB以上のメモリを割り当てました。

ありがとうございました。

+1

アプリケーションがクラッシュしており、メモリが不足して終了していないことを確認してください。 OSによって終了された場合、AFAIKはクラッシュログを生成しません。 –

+1

私はアウト・オブ・メモリは古典的な "コード101で終了"だと思っていますが、おそらく私は誤解しています。 –

答えて

5

提案のカップル:

  1. は、あなたが実際に)(メインから戻る、)(出口を呼び出し、またはそうでなければきれいにどこでもあなたのコードでは出ていないことを確認します。アプリケーションがただ終了してクラッシュしていない場合、明らかにログは残されません。

  2. 私は、システムを非常に急速にメモリから実行すると、アプリケーションがクラッシュログを残さずにクラッシュすることがあると思います。インストゥルメントの下で実行し、時間の経過とともにメモリ使用量がどのように見えるかを確認します。

  3. 問題を「しばしば」再現する一連の手順がある場合は、デバッガで実行し、クラッシュするまで突き止めてください。それは30分の時間を費やすかもしれません。

明らかに/簡単なことを排除すると、それはより曖昧になります。バッファオーバーラン、無効なポインタの再利用などを介して途中でヒープやスタックを破壊している可能性があります。

  1. 環境変数でNSZombieEnabled = YESを指定して実行してみてください。これは、解放されたオブジェクトの再利用を見つけるのに役立ちます。それはメモリ使用量に大きな影響を与えます。だから誰にも当てはまらないかもしれません。 NSZombie(他のものの中でも)を扱っているのはan Apple articleです。

  2. iPhone Simulatorで実行しているときは、ハードウェアメニューの[Simulate Memory Warning]項目を使用してメモリ不足の状態を強制します。これにより、予測できない時間に実行されるコード内のバグが洗い流されます。 malloc関数、のcalloc、reallocの、memcpyを、strcpyの、strncpyを、等 - - とバッファがその絶対的に確認してください

  3. なく、少なくとも最後に、どこでもあなたは低レベルCのメモリ操作関数を使用しているため、あなたのコードを検索しますサイズは適切です。

関連する問題