4

メイン メソッドですべての NSExceptions をログに記録する以外に、すべてのエラー メッセージをどこでキャプチャする必要がありますか? たとえば、過剰にリリースされたオブジェクトにアクセスしたためにアプリがクラッシュした場合、クラッシュに関する利用可能なすべての情報を取得して、デバイスのローカル ファイルに書き込むにはどうすればよいですか? XCode でこれを行う方法は知っていますが、オフサイトの QA テスターからこの情報を入手する必要があります。

これらのメモリ エラーが発生すると、メイン メソッドによってキャッチされないようです。

4

2 に答える 2

3

これを本当にうまくやるのは、実際には非常に困難です。クラッシュの最中です。これは、システムが未定義の状態であることを意味します。小さなエラーが完全なデッドロックにつながる可能性があります (たとえば、ヒープがロックされているときにクラッシュし、さらにメモリを割り当てようとした場合)。ビルドとデバッグの学習経験を探しているのでない限り、既存のフレームワークを再利用する必要があります。最高の IMO はPLCrashReporterで、現在の状態に到達するまでに多くの反復が行われました。独自のサーバー (およびいくつかの商用ソリューション) でクラッシュ レポートを管理するために、 QuincyKitとうまく統合することもできます。

自分で作成することに決めた場合 (そうすべきではないと言いましたか?)、まず PLCrashReporter を調べて、彼らがどのようにそれを行っているかを確認してください。最も重要なルールが 1 つあるとすれば、それは次のようになります: クラッシュ中はできるだけ何もせず、次の起動時に複雑な処理を処理します。

于 2012-06-01T02:55:10.050 に答える
1

この投稿の情報は、おそらく役に立ちます。基本的に、未処理の例外またはシグナルが満たされたときに呼び出されるように、objective-c の関数を設定できます。

次のようになります。

NSSetUncaughtExceptionHandler(&HandleException);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);

この投稿の残りの部分では、これらのメソッド (HandleException および SignalHandler) をセットアップする方法について説明します。

于 2012-06-01T01:51:49.950 に答える