3

アプリの「実際の」クラッシュについて知りたいです。を使用すると、マネージ例外を簡単にキャプチャできますAppDomain.CurrentDomain.UnhandledException

アンマネージ コードでクラッシュが発生することがあります (ネイティブ ライブラリとの独自のやり取り、または monomac の誤用や monomac 自体の問題による場合もあります)。これらがいつ起こるのか、私も知りたいです。

plcrashreporterフレームワークをバインドし、アプリに追加しました。アプリケーションでのクラッシュ レポーターの使用に関する議論を読み、回避策Xamarin.iOSを実装しました。

これまでのところ、問題はありません。クラッシュ レポーターを使用でき、アプリは正常に動作します。ただし、実際にキャッチされるシグナルは限られているようです。

たとえば、SIGILLどちらSIGABRTもクラッシュ レポーターによってトラップされます。クラッシュ レポートはディスクに書き込まれ、次回アプリを起動したときに読み取ることができます。

ただし、引っかからないSIGSEGVでください。SIGBUS代わりに、スタック トレースがコンソールに次のように書き込まれます。

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

そのため、Mac の状況は iOS の状況とまったく同じではないようです。回避策により、クラッシュ レポーターを実行できますが、アンマネージ コードから SIGSEGV を取得したときに、Mono が SIGABRT を発生させていないようです。

何か案は?

4

1 に答える 1

1

SIGSEGVおよびハンドラーを削除して再割り当てするための回避策はSIGBUS、デバッガーが接続された状態でアプリケーションを実行する場合にのみ必要です。

ライブ エラーのみに関心があるため、有効にするコードをPLCrashReporter. で囲むことができ#IF DEBUGます。

于 2013-10-22T15:42:31.227 に答える