Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Error Handling in Xamarin Forms
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

Error Handling in Xamarin Forms

beantworten | zitieren | melden

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 ?

2. 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
Attachments
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.504

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden


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
Attachments
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden

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
Attachments
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.504

beantworten | zitieren | melden

Der Bug scheint jetzt in der UnhandledException-Methode selbst zu sein: benutze dort mal try..catch ...
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden


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
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden

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 :

Fehler

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
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.504

beantworten | zitieren | melden

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].
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden


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
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.504

beantworten | zitieren | melden

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).
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden


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
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden


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
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.504

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.806
Herkunft: Frankfurt a.M.

Themenstarter:

beantworten | zitieren | melden


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
private Nachricht | Beiträge des Benutzers