Restart bei Fehler

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Restart bei Fehler

    Hallo,

    mein Programm hat alle 1-2 Wochen einen Fehler (es bleibt sehehen und es kommt ein Fenster mit einem Fehler wo man es beenden kann) und ich bin bis jetzt nicht darauf gekommen was daran schuld sein kann bzw. glaube ich das ein externes Gerät was über RS232 angschlossen ist der Grund sein kann...
    Da ich auf diesen Gerät keinen Einfluss habe, wollte ich fragen ob es einen Möglichkeit gibt das Programm automatisch neu zu starten sobald irgendein Fehler passiert?

    MfG
    Hi,

    also es macht mehr Sinn deine Energie einzusetzen um Fehler zu finden und dafür zu sorgen das diese nicht mehr auftreten können, als das was du da planst. Wenn ich mir gerade vorstelle, ein Online-Rennspiel, -n Sekunden vor allen anderen beim letzten Checkpoint, auch so eine richtig gute Zeit und dann eine Exception. Bitte neu starten.... dann vergeht einem die Lust.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    @winke Ich würde mal nachsehen ob der Fehler in einem Nebenthread auftritt. Das ist oft die Uhrsache das eine App einfach so abschmiert.
    Wenn du dennoch deine Energy in dieses Vorhaben stecken willst was ich nicht empfehle, dann man eine kleine "MiniApp" welche überwacht ob das Programm Antwortet, wenn nicht killt es den Process und startet es neu.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich suche den Fehler schon seit längerer Zeit (ca. 1 Jahr) und komme aber auf keine Lösung, da es sich nicht immer um den selben Fehler handelt. Ich vermute dass das angeschlossene RS232 Gerät daran schuld ist.

    Würde diese "Neustart-Funktion" gerne in das vorhandene Programm einfügen. Also kein extra Programm laufen lassen.

    MfG

    winke schrieb:

    Würde diese "Neustart-Funktion" gerne in das vorhandene Programm einfügen. Also kein extra Programm laufen lassen.

    Wiederspricht sich doch oder?
    Du kannst den Fehler nicht lokalisieren und dein Programm schmiert ab, willst aber auf den Fehler reagieren? Merkst du`s?
    Wenn dein Program nicht reagiert kannst du auch keinen Code ausführen oder? Ich nehme wie gesagt an das es auch einem Nebentread kommt, so viele wirst du da ja nicht haben.
    Entweder Fehler lokalisieren oder einen hässlichen Workaround, mehr spielt es hier nicht.

    ICH würde Anfangen wenn noch nicht gemacht mal Aplication_UnhandledException mit einem Code zu versehen welcher mir einen Fehler der hier auftritt in ein File schreibt.
    Dann würde ich die Prozeduren welche in einem NebenThread laufen kontrollieren und ebenfalls mit einem Log versehen, spätestens beim nächsten Abturz weis ich wo der Fehler liegt. Fertig.

    Grüße
    sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Jep, logging ist das A und O wenn es darum geht Fehler in der Wildnis zu finden. Ich bin bei einem Service so weit gegangen den Start und das Ende jeder einzelnen Funktion sowie weitere infos mitsamt Timestamp in ne Logfile zu schreiben. Dadurch konnte ich schon Kunden auf bisher unbekannte Neustarts ihrer Server aufmerksam machen. (und habe herausgefunden, dass der MySQL Dienst ziemlich lange braucht um zu starten :/ ). Im besten falle lässt sich das Logging über einen Eintrag in einer .ini oder der Registry aktivieren, denn logging kann, je nachdem wie viel und/oder wie oft geschrieben wird, ziemlich an der Performance knabbern.

    Ansonsten ist das Neustarten einer Anwendung recht einfach. Neuen Prozess deiner eigenen Anwendung starten, Application.Exit() aufrufen. Fertig.
    @winke Poste mal das Fenster.
    Werte die Fehlermeldung aus.
    Starte das Programm in der Entwicklungsumgebung. Kommt da ein äquivalenter Fehler?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Fehler kommen meistens dieser:


    Informationen über das Aufrufen von JIT-Debuggen
    anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

    ************** Ausnahmetext **************
    System.ArgumentException: Das Argument Length muss größer als oder gleich 0 (null) sein.
    bei Microsoft.VisualBasic.Strings.Mid(String str, Int32 Start, Int32 Length)
    bei WindowsApplication1.Hauptfenster.Auswerten()
    bei WindowsApplication1.Hauptfenster.Abfrage_Tick(Object sender, EventArgs e)
    bei System.Windows.Forms.Timer.OnTick(EventArgs e)
    bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    winke schrieb:

    Das Argument Length muss größer als oder gleich 0 (null) sein.
    bei Microsoft.VisualBasic.Strings.Mid(String str, Int32 Start, Int32 Length)


    Lol, da steht doch was los ist! Du versuchst eine Zeichenfolge aus einem String zu hohlen, wobei du eine länge < als 0 angibst. Falls der Wert aus einer variablen stammt solltest du vllt. mal vorher testen ob der Wert >= 0 ist, evtl. auch mal forschen warum dieser < 0 ist.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Was auch immer da passiert, wo auch immer die übergebene Length herkommt... wie wäre es damit die zu prüfen, ob die >0 ist, mal abgesehen davon, das es "Deinstring".Substring() bzw. deineStringVariable.Substring() gibt?
    Als nächstes, prüfe warum der Funktion ein Wert von <0 übergeben wird, bzw. wo dieser Wert herkommt. Es muss irgendetwas in deiner Auswerten() Funktion des Hauptfensers sein (ausgehend davon, dass Abfrage_Tick nichts anderes macht, als Auswerten aufzurufen).
    Das ist mir schon klar das da steht was das Problem ist.
    Starte ich nach dem Fehler das Programm neu, wird exakt das gleiche ausgeführt und der Fehler tritt nicht auf. Es wird über die RS232 Vebindung alle 5 Sekunden etwas abgefragt und da tritt dann alle 1-2 Wochen anscheinend ein Fehler auf...
    Wie soll ich also herausfinden wann und vorallem warum das so ist... Da starte ich lieber das Programm neu und es läuft alles weiter...

    winke schrieb:

    Da starte ich lieber das Programm neu und es läuft alles weiter...

    Wie geil!
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @winke Lerne zu debuggen, setze einen Haltepunkt drauf und erforsche den Inhalt Deiner Variablen.
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!