1

This link beschreibt, wie Ausnahmen in iOSWie kann ich alle * iOS-Ausnahmen in Xamarin zuverlässig erfassen?

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); 
}; 

Zusätzlich zu behandeln, habe ich andere Xamarin Samples verwenden, dies in der 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; 
    } 
}; 

Frage

Was die Ausnahme gesehen Typen (wenn mehr als Managed/Unmanaged) und wie erfasse ich alles?

+0

Haben Sie versucht, versuchen Sie, um Ihre Hauptfunktion zu fangen? static void Main (string [] args) - sollte in Ihrer Main.cs-Datei enthalten sein. Nichts würde ich empfehlen, aber es sollte funktionieren;) – Lepidopteron

Antwort

0

Es versteht sich von selbst, dass ein 'globaler' Exception-Handler kein Ersatz für erwartete erwartete oder erwartete Exceptions von Code-Blöcken ist, mit denen Sie Probleme erwarten (möglicherweise weil Sie die parallelen Libraries oder irgendetwas mit anderen verwenden) Art der Thread-Komplexität).

'globale' Ausnahme-Handler (meiner Meinung nach) sollten verwendet werden, um alles abzufangen, das Sie während der Entwicklung und des Testens übersehen haben. Persönlich schreibe ich diese in eine Protokolldatei in unseren Anwendungen und behandle sie als 'Kritische Ausnahmen', da sie zum Absturz der Anwendung führen. Meine bevorzugte Methode ist, ein Ereignis zu 'AppDomain.CurrentDomain.UnhandledException' zuzuweisen.

Während der Entwicklung, Tests und wenn während der Produktion die Benutzer Ihrer Anwendung "Diagnoseberichte" aktiviert haben, können Sie auf die Ausnahmeprotokolle von Apple zugreifen. Diese können nützlich sein, aber bedenken Sie, dass sie Ihnen den "nativen" Stack-Trace geben und nichts speziell für Xamarin in ihnen haben werden. Also nimm sie mit einer Prise Salz.

was Ihre Frage betrifft, erfasst das Zuweisen zu 'AppDomain.CurrentDomain.UnhandledException' jede Ausnahme, die Sie nicht selbst gemacht oder vorhergesehen haben. Sie müssen die Typen nicht explizit kennen, da die Stack-Trace Ihnen offensichtlich sagen wird, was sie sind. Es ist auch erwähnenswert, dass Sie dieses Ereignis nur zum Aufzeichnen von Informationen oder zum Ausführen grundlegender Funktionen verwenden können, da die App unabhängig davon geschlossen wird, was Sie tun. Verwenden Sie es also, um so viele Informationen wie möglich über Ihre Anwendung zu protokollieren.

Es ist derzeit nicht möglich, das Schließen Ihrer Anwendung zu stoppen, wenn das Ereignis unhandledexception ausgelöst wird.

Verwandte Themen