1

This linkまたiOSのXamarinで*すべての* iOS例外を確実にキャプチャするにはどうすればよいですか?

Runtime.MarshalManagedException += (object sender, MarshalManagedExceptionEventArgs args) => 
{ 
    Console.WriteLine ("Marshaling managed exception"); 
    Console.WriteLine (" Exception: {0}", args.Exception); 
    Console.WriteLine (" Mode: {0}", args.ExceptionMode); 

}; 
Runtime.MarshalObjectiveCException += (object sender, MarshalObjectiveCExceptionEventArgs args) => 
{ 
    Console.WriteLine ("Marshaling Objective-C exception"); 
    Console.WriteLine (" Exception: {0}", args.Exception); 
    Console.WriteLine (" Mode: {0}", args.ExceptionMode); 
}; 

で例外を処理する方法について説明し、私は他のXamarinサンプルはAppDelegate

AppDomain.CurrentDomain.UnhandledException += (sender, e) => { 
try 
{ 
    var exception = ((Exception)e.ExceptionObject).GetBaseException(); 
    Console.WriteLine("**SPORT UNHANDLED EXCEPTION**\n\n" + exception); 
    exception.Track(); 
    } 
    catch 
    { 
    throw; 
    } 
}; 

に例外ではどのような質問

これを使用し見てきましたタイプ(Managed/Unmanaged以上の場合)、およびすべてをキャプチャするにはどうすればよいですか?

+0

あなたの主な機能を試してみましたか? static void Main(string [] args) - Main.csファイル内にあるはずです。私がお勧めするものはありませんが、うまくいくはずです;) – Lepidopteron

答えて

0

「global」例外ハンドラは、問題を予期していると予想されるコードブロックから予期された例外や予想される例外を正しくキャッチするための置き換えであってはいけません(おそらく、parrallelライブラリや、ある種のスレッドの複雑さ)。

「グローバル」例外ハンドラは、開発やテスト中に見つからなかったものを捕まえるために使用する必要があります。個人的には、これらのファイルをアプリケーションのログファイルに書き込んで、アプリケーションをクラッシュさせるような「重大な例外」として処理します。私の優先する方法は、 'AppDomain.CurrentDomain.UnhandledException'にイベントを割り当てることです。

開発中と言われていますが、実稼働中にアプリケーションのユーザーが「診断レポート」をオンにしていると、あなたはリンゴ例外ログにアクセスできます。これらは便利なことがありますが、あなたには 'ネイティブ'のスタックトレースが与えられ、それらにはxamarin固有のものはありません。だから塩のピンチでそれらを取る。

あなたの質問に関しては、「AppDomain.CurrentDomain.UnhandledException」に割り当てて、あなたが行っていない、または自分自身を見抜いたすべての例外をキャプチャします。スタックトレースが明示的にどのようなものであるかを明示するので、型を明示的に知る必要はありません。また、そのイベントを使って情報を記録したり、基本機能を実行したりすることはできますが、アプリはあなたの行動に関係なく終了します。できるだけ多くの情報をログに記録してください。

現在、アプリケーションがunhandledexceptionイベントに当たった場合、アプリケーションの終了を停止することは不可能です。

関連する問題