Laden...

Error Handling in Xamarin Forms

Erstellt von BerndFfm vor einem Jahr Letzter Beitrag vor einem Jahr 997 Views
BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr
Error Handling in Xamarin Forms

Hallo,

meine Xamarin Forms App läuft inzwischen auf vielen Handys und Tablets. Auch sehr stabil und zuverlässig. immer noch VS 2019.

Leider ist es bei Auftreten eines Fehlers so dass die App einfach abstürzt, und natürlich weiß man nicht wieso.

Ich habe jetzt ein sehr einfaches Error Handling eingebaut dass alle Fehler abfängt, in eine Datei schreibt und beim nächsten Start anzeigt.

Jetzt sehe ich zwar den Fehler und den Stack, aber leider nicht die Zeilennummer wo der Fehler aufgetreten ist. Auch wenn ich die PDB-Datei mitliefere oder einbette ist das so.


protected override void OnCreate(Bundle savedInstanceState)
{
    ...
    System.AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
    System.Threading.Tasks.TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
    ...
}

private void CurrentDomainOnUnhandledException(object sender, System.UnhandledExceptionEventArgs e)
{
    UnhandledException(sender, (System.Exception)e.ExceptionObject);
}

private void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
    UnhandledException(sender, e.Exception); 
}

private void UnhandledException(object sender, System.Exception ex)
{
    string error = ex.Message;
    if (ex.InnerException != null) error += "\r\n" + ex.InnerException.Message;
    error += "\r\n\r\nStack :" + ex.StackTrace;
    if (error.Length > 500) error = error.Substring(0, 500) + " ...";
    File.WriteAllText(Path.Combine(FileSystem.AppDataDirectory, "Errorlog.txt"), error);
}

Wie kann ich die genaue Stelle herausbekommen wo der Fehler aufgetreten ist ?

  1. Frage : Im Debug Mode ist es auch so dass beim Auftreten eines Fehlers die Stelle im Code nicht angezeigt wird wo der Fehler aufgetreten ist. Ist das bei Xamarin Forms immer so ?
    Sehr unpraktisch.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.937 Beiträge seit 2008
vor einem Jahr

Hallo,

aktiviere mal debug.mono.debug mit


adb shell setprop debug.mono.debug 1

(aus Exception stack trace does not include line numbers in debug build when no debugger is attached)

Ich weiß allerdings nicht, wie du das bei deinen App-Benutzern automatisch aktiviert bekommst.

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Leider funktioniert das nicht.

Merkwürdig ist dass das Debuggen funktioniert mit Anzeige des Source Code.

Die App läuft auf einem externen Device über USB oder WLAN angebunden. Ein Samsung Galaxy S6 Tablet.

Den Methodennamen in der der Fehler aufgetreten ist kennt das StackTrace, nur die Zeilennummer nicht.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Toll !

Jetzt hab ich einen Fehler der absolut unregelmäßig auftritt. Und ich hab keinen Plan wo.

Wie findet man den jetzt ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.937 Beiträge seit 2008
vor einem Jahr

Der Bug scheint jetzt in der UnhandledException-Methode selbst zu sein: benutze dort mal try..catch ...

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Danke !!!

Das wars, jetzt läuft die App bei mir wieder stabil. Bei einigen wenigen Leuten kommt es aber immer wieder zu Abstürzen.

Ich werde jetzt mal das Update mit dieser Fehlermeldung verteilen und schauen ob ich was finde.

Danke nochmal Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Leider zeigt mir das Visual Studio bei einem Fehler nie die Zeile an wo der Fehler auftritt. Das macht die Fehlersuche immer sehr schwierig.

Folgendes wird bei einem Fehler im Debug Mode angezeigt :

Fehlermeldung:

Die Anwendung befindet sich im Haltemodus

Ihre App wurde angehalten, aber es gibt keinen anzuzeigenden Code, da alle Threads externen Code ausgeführt haben (normalerweise System- oder Frameworkcode).

Details anzeigen :


Microsoft Visual Studio

EXCEPTION: Mono.Debugger.Soft.VMNotSuspendedException: The vm is not suspended.

bei Mono.Debugger.Soft.VirtualMachine.ErrorHandler(Object sender, ErrorHandlerEventArgs args) in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\VirtualMachine.cs:Zeile 367.

bei Mono.Debugger.Soft.Connection.SendReceive(CommandSet command_set, Int32 command, PacketWriter packet) in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\Connection.cs:Zeile 1806.

bei Mono.Debugger.Soft.VirtualMachine.Resume() in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\VirtualMachine.cs:Zeile 139.

bei Mono.Debugging.Soft.SoftDebuggerSession.HandleEventSet(EventSet es) in C:\A\1\5\s\External\debugger-libs\Mono.Debugging.Soft\SoftDebuggerSession.cs:Zeile 1871.

bei Mono.Debugging.Soft.SoftDebuggerSession.EventHandler() in C:\A\1\5\s\External\debugger-libs\Mono.Debugging.Soft\SoftDebuggerSession.cs:Zeile 1772.


OK

Wie kann man erreichen dass beim VS 2019 bei Xamarin Forms die Zeile angezeigt wird wo der Fehler auftritt ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.937 Beiträge seit 2008
vor einem Jahr

Das wird wohl laut Fehlermeldung wirklich daran liegen, daß der Fehler im Framework-Code liegt. Du müßtest daher die PDB-Dateien dafür herunterladen (lassen), s. SymbolSource: Visual Studio bzw. mit Bildern Source Code Debugging [with BuildIt Libraries].

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Der Fehler war in meinem C# Code.

Diese Anzeige bekomme ich bei jedem Fehler.

Breakpoint setzen und Debugging funktioniert.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.937 Beiträge seit 2008
vor einem Jahr

Hast du das neueste VS 2019-Update 16.11.x? Vor 2 Jahren gab es schon diesen Fehler und ein Fix dafür wurde in Version 16.8 eingebaut: Error debuging Xamarin.Forms app

Ansonsten mußt du dich mal selber an Microsoft wenden ("Send feedback" Button oben rechts im VS).

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Ich habe Version 16.11.21, also die aktuellste Version.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Hab im Android Projekt in der csproj-Datei den Eintrag

<DebugType>portable</DebugType>

geändert in

<DebugType>full</DebugType>

Jetzt wird die Stelle angezeigt wo der Fehler auftritt.

Schade dass das nicht die Standard Einstellung ist und auch nirgendwo dokumentiert ist.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

4.937 Beiträge seit 2008
vor einem Jahr

OK, darauf wäre ich nicht gekommen.
Aber ich habe mal recherchiert: DebugType = full ist eigentlich seit Xamarin.Android 11.2 veraltet (und es sollte eine Warnung ausgegeben werden): Xamarin.Android 11.2 release notes: Deprecation of DebugType full and pdbonly
Welche Xamarin.Android Version verwendest du denn?

BerndFfm Themenstarter:in
3.825 Beiträge seit 2006
vor einem Jahr

Ich benutze Android.Forms Version 5.0.0.2012+671 vom 2. Februar 2021.

Wenn es funktioniert ist es mir egal ob es deprecated ist.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3