Laden...

Programmabsturz ohne Fehlermeldung

Erstellt von Jonas007 vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.424 Views
J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren
Programmabsturz ohne Fehlermeldung

Hallo liebe Community!

Ich habe ein Windows Forms Porgramm, welches mit der Seriellen Schnittstelle mit der Klasse SerialPort arbeitet. Manchmal stürzt es einfach ab, hängt sich auf oder Ähnliches. Ich habe an den sensiblen Stellen nun ein try und catch einprogrammiert, unter anderem auch im Programm.cs über die gessamte Main Methode (ich weiß, dass das eine sehr schlechte Art ist zu programmieren), jedoch stürzt es einfach ab. Ich weiß nicht mehr, was ich tun soll, wenn ich nichtmal mit dem Debuggen voran komme.

Vielen Dank im voraus!

4.939 Beiträge seit 2008
vor 2 Jahren

SerialPort.DataReceived läuft ja in einem eigenen Thread (und daher werden dessen Exceptions nicht vom Main-Thread gefangen) - setze daher mal dort ein try...catch hin.
Es kann auch ein Problem beim Treiber vorliegen. Schau auch mal in die Ereignisanzeige (events) von Windows, ob dort etwas geloggt wurde.
Welches Gerät benutzt du denn über den seriellen Port?

J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren

Ich habe auch den gesamten Code des SerialPort.DataRecived Events in einem try ... catch Block.
Mit der Windows Ereignisanzeige muss ich mich zuerst noch etwas genauer auseinandersetzten, da ich damit noch nie etwas gemacht habe (wird schon nicht so schwer sein).
Ich benutze einem Arduino, welcher Datei auswertet/berechnet und diese in einem speziellen Format an den PC sendet.

Vielen Dank erstmal 🙂

J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren

Ich habe nun einige Fehler in der Ereignisanzeige gefunden. Es sind viele Fehler jedoch immer nur eine dieser 3 Meldungen:

1. Meldung:

Fehlermeldung:
Name der fehlerhaften Anwendung: <Name meines Programms>.exe, Version: 1.0.0.0, Zeitstempel: 0xec1bc32b
Name des fehlerhaften Moduls: KERNELBASE.dll, Version: 10.0.19041.1466, Zeitstempel: 0xc79f51a9
Ausnahmecode: 0xe0434352
Fehleroffset: 0x0012b662
ID des fehlerhaften Prozesses: 0x3578
Startzeit der fehlerhaften Anwendung: 0x01d81c294ec31719
Pfad der fehlerhaften Anwendung: <Pfad meines Prgramms>.exe
Pfad des fehlerhaften Moduls: C:\WINDOWS\System32\KERNELBASE.dll
Berichtskennung: 34b02bb0-da60-4925-8a04-d9edf36be58f
Vollständiger Name des fehlerhaften Pakets:
Anwendungs-ID, die relativ zum fehlerhaften Paket ist:

++2. Meldung: ++

Fehlermeldung:
Anwendung: <Name meines Programms>.exe
Frameworkversion: v4.0.30319
Beschreibung: Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet.
Ausnahmeinformationen: System.ArgumentOutOfRangeException

--> Den Ursprung dieser System.ArgumentOutOfRangeException habe ich bereits gefunden und gefixt

3. Meldung:

Fehlermeldung:
Das Programm <Name meines Programms>.exe Version 1.0.0.0 hat die Interaktion mit Windows beendet und wurde geschlossen. Überprüfen Sie den Problemverlauf in der Systemsteuerung "Sicherheit und Wartung", um nach weiteren Informationen zum Problem zu suchen.
Prozess-ID: 2688
Startzeit: 01d81c2b73a9b5b9
Beendigungszeit: 8
Anwendungspfad: <Pfad meines Programms>.exe
Bericht-ID: cffb16f3-871c-4b84-abb8-9b40456959a8
Vollständiger Name des fehlerhaften Pakets:
Relative Anwendungs-ID des fehlerhaften Pakets:
Absturztyp: Cross-thread

Wäre super, wenn mir jemand bei diesen Fehlermeldungen helfen kann. Ich selbst werde natürlich auch umgehend nach ihnen suchen und versuchen ihren Ursprung zu finden.

16.832 Beiträge seit 2008
vor 2 Jahren

Absturztyp: Cross-thread sieht so aus, dass Du eine klassische Thread-Verletzung hast.
Du also zB von Thread A auf Thread B zugreifst, was nicht geht.

Das kann auch eine UI Aktualisierung sein, bei der Du nicht prüfst (und ggfls invokest), ob Du im richtigen Thread bist.
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

4.939 Beiträge seit 2008
vor 2 Jahren

Absturztyp: Cross-thread

Greifst du innerhalb des DataReceived-Ereignisses auf UI-Controls zu? Dann s. [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke).

Es sollte dann aber eigentlich eine .NET-Exception geworfen werden.
Oder hast du Exceptionsbehandlung im VS ausgestellt?

Edit: Oh, diesmal war Abt schneller. 🙂

J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren

Danke euch. Ja, ich greife auf in dieser Methode auf UI Elemente zu und der Fehler liegt wahrscheinlich darin. Ich muss mir das noch genauer ansehen, wie ich das fixe, da ich noch ein ziemlicher Anfänger bin. Was mich jedoch wundert ist: Das Event wird einige Male (10-100) aufgerufen und UI Elemente verändert - und das ohne Probleme. Erst zu einem bestimmten Zeitpunkt, nachdem das Programm bereits ca. 30 Sekunden läuft und schon 10-100 Mal ein DataRecived Event einwandfrei ausgelöst hat, und UI Elemente erfolgreich verändert wurden stürzt es ohne Vorwarnung ab.

Es sollte dann aber eigentlich eine .NET-Exception geworfen werden.
Oder hast du Exceptionsbehandlung im VS ausgestellt?

Ja, das dachte ich auch. Desshalb bin ich an den Fehler so verzweifelt weil weder in meinen Catch Block gesprungen wird, noch eine Fehlermeldung erscheint. Ich wüsste nicht, dass ich jemals etwas an den Standarteinstellungen in VS geändert habe. Ich habe die "Ausnahmeeinstellungen" in VS gefunden, weiß jedoch nicht, wie das genau konfiguriert werden sollte.

16.832 Beiträge seit 2008
vor 2 Jahren

Erst zu einem bestimmten Zeitpunkt, nachdem das Programm bereits ca. 30 Sekunden läuft und schon 10-100 Mal ein DataRecived Event einwandfrei ausgelöst hat, und UI Elemente erfolgreich verändert wurden stürzt es ohne Vorwarnung ab.

Weils erst knallt, wenn es zu einer Verletzung der Synchronität kommt, dafür gibts keinen garantierten Zeitpunkt in diesem Fall.
Erst durch das Invoke bist Du garantiert im korrekten Thread, damit ist die Synchronität korrekt und es kann gar nicht knallen.