2016-11-22 4 views
0

Ich arbeite an einer Anwendung mit Xamarin (in Visual Studio 2015) für Android.Wie Debuggen einer Absturzanwendung

Wenn ich meine Anwendung im Debug-Modus ausführen, wird die Anwendung manchmal mit der Meldung "MyApplication wurde gestoppt" beendet.

Ich habe diesen Code in MainActivity hinzugefügt:

// Catch Exception 
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser; 

Ich habe Stützpunkte log in beiden Funktionen hinzufügen, aber ich sehe keine Spuren in Protokoll- und die Haltepunkte werden nicht erreicht.

Wie kann ich diese Art von Problem debuggen?

Antwort

1

Sie müssen Ihre Anwendung über einen persistenten Logger debuggen, d. H. adb logcat. Leider kann die Registrierung eines unbehandelten Exception-Handlers nicht garantieren, dass es sich um einen "Catch-All" handelt, da dieser Punkt möglicherweise nie erreicht wird. Sie benötigen also eine Kombination aus adb logcat und für diese Art von Problemen. Bitte beachten Sie den folgenden Hinweis, wenn Sie sehen möchten, was in diesem Handler vor sich geht, aber verwenden Sie auch adb logcat, um den Grund des Absturzes zu sehen.

/// <summary> 
/// When app-wide unhandled exceptions are hit, this will handle them. Be aware however, that typically 
/// android will be destroying the process, so there's not a lot you can do on the android side of things, 
/// but your xamarin code should still be able to work. so if you have a custom err logging manager or 
/// something, you can call that here. You _won't_ be able to call Android.Util.Log, because Dalvik 
/// will destroy the java side of the process. 
/// </summary> 

protected void HandleUnhandledException (object sender, UnhandledExceptionEventArgs args) 
{ 
    Exception e = (Exception) args.ExceptionObject; 

    // log won't be available, because dalvik is destroying the process 
    //Log.Debug (logTag, "MyHandler caught : " + e.Message); 
    // instead, your err handling code shoudl be run: 
    Console.WriteLine ("========= MyHandler caught : " + e.Message); 
} 

https://github.com/xamarin/monodroid-samples/blob/fb9d4ed266bdf68bb1f9fa9933130b285712ec82/AdvancedAppLifecycleDemos/HandlingCrashes/App.cs

1

Probieren Sie es aus: Deaktiviert "Gemeinsame Laufzeit verwenden" in Android Build-Optionen. Wenn es nicht geholfen hat - deaktiviere "Fast Deplayment verwenden".