2011-01-28 23 views
14

私は野生の厄介なバグを表示しており、私はそれに私の指を置くことはできません。 Global Try/Catchブロックを持つ方法、またはMonotouchで手に入らない例外を処理する方法がありますか?モノトーングローバル例外処理

UIApplication.Main(args)をtry catchでラップすることはできますか?

例外がキャッチされた後、Idは結果を表示するためにUIAlertViewを表示します。

助けが必要ですか?

+0

これがモノトゥッチであるかどうかはわかりませんが、使用するウィンドウではわかりません。http://msdn.microsoft.com/en-us/library/system.windows.application.unhandledexception(v=vs.95).aspx – Nate

答えて

14

try {} catch {}内でUIApplication.Main(args)をラップすることはできますが、その時点でUIAlertViewを表示することはできません。すべてのUIを含むスタック全体を解放したからです。あなたができることは、アプリケーションバンドルのDocumentsフォルダにあるクラッシュファイルに例外を記録し、次回の起動時にそれを表示するか、Webサービスにアップロードすることです。

Exceptioneer男もMonoTouchサポートに取り組んでいましたが、それは検討する価値があります。

+0

Hey Geoff、下の私の答えであなたの質問を参照してください... – Ethan

+1

Exceptioneerが放棄されているかどうかを調べようとしています... – tomfanning

+2

そうです。悲しい時。 – tomfanning

1

未処理の例外ハンドラ、つまりAppDomain.CurrentDomain.UnhandledExceptionイベントを使用して成功しました。これは多くの(ただしすべてではない)未処理の例外をキャッチするようです。管理されていないコードでクラッシュすると、このイベントを呼び出さずにアプリケーションが失敗する可能性があります。

GeoffUIApplication.Mainの例外をキャッチすることに加えて、このイベントをキャプチャするか、どちらかの方法が優先されますか?

+0

それは本当に問題ではありませんが、ネイティブコードでクラッシュすると、あなたを壊してしまいます。アプリは基本的にその時点で壊れていて、それをうまく処理するために何もできません。 montouchコミュニティメンバーの一人が、リリースビルドでdup2(3)を使ってstdoutとstderrをファイルにリダイレクトして、次回の実行時に自分自身にクラッシュログをアップロードできるようにしました。 –