アプリの「実際の」クラッシュについて知りたいです。を使用すると、マネージ例外を簡単にキャプチャできます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 を発生させていないようです。
何か案は?