Autoit Error Msgbox (Programmabsturz) abfangen & loggen

  • Habe hier ein Programm in AutoIt vorliegen was eigentlich recht stabil läuft
    Doch hab heute einmal nen Fehler mit Badly formatted Array bekommen auf Zeile 1110 .... hier liegt aber eigentlich nur ein Sleep
    kann aber daran liegen das der fehler in der exe auftrat

    Der Fehler taucht allerdings nur selten bis garnicht auf während das Programm läuft

    Wenn ein Autoit Programm abstürzt zeigt es ja eine MsgBox mit Fehler
    Wie kann ich diesen Fehler "abfangen" um es dann zu loggen?

    Wäre cool wenn jemand weiss wie

    Einmal editiert, zuletzt von Aldi (7. März 2012 um 20:23)

  • Servous, du kannst mal dein Script Debuggen über "Syntax Check Prod." in Scite, alle Syntaxfehler usw werden dir dort gelistet..

    Gruß Marvin

  • Das ist ja das Problem an der Sache ;)
    Der Syntax weisste keinen Fehler auf

    Der Fehler tritt nur ganz selten auf während das Programm läuft aber ich weiss nicht wodran es liegen könnte :/

  • Okay, naja es wird wohl so sein dass du im laufe deines Scripts ein Array verwendest was zb. Du rufst ein Array ab $aArray[101][1] und dein letztes eintrag ist aber $aArray[100][1] dann versuchst du eine Stelle auszulesen die nicht existiert, sind eventuell ReDim's in deinem Script vorhanden? , ohne dein Script zu sehen können wir dir leider anhand dieser Fehlerbeschreibung nicht wirklich weiterhelfen dass ist einfach nur ein Ratespiel..

    Gruß Marvin

  • Die Arrays sind eigentlich groß genug das kann nicht der Fehler sein ;)
    Vorallem tritt der Fehler ja scheinbar in der selben Schleife auf , welche zuvor x mal geklappt hat

  • Okay dann ist es so, dann sag du mir bitte wie wir dir so ins Blaue hinaus helfen sollen?? lese mal deine Fehlerbeschreibung bzw denke dich mal in unsere Lage du würdest dass Lesen, wie würdest du dem User helfen? mit 10000 SInnlosen Posts die es ggf sein können? beste Lösung Poste dein Script damit man es nachvolziehen kann andernfalls kann ich dir leider nicht helfen

    Gruß Marvin

  • Hab aktuell diese lösung :

    [autoit]

    While 1
    Sleep(10)
    if WinExists("AutoIt Error") Then
    $error = ControlGetText("AutoIt Error","","[CLASS:Static; INSTANCE:2]")
    WinKill("AutoIt Error")
    MsgBox(0,"","Error Detected" & @CRLF & @CRLF & $error)
    ExitLoop
    EndIf
    WEnd

    [/autoit]

    Funktioniert auch soweit nur ist ja nich ganz das wahre ;)

    Ausschnitt in dem der Fehler in meinem Skript auftaucht :

    [autoit]

    Dim $info1[222], $info2[15]

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To 186
    If $info1[$i] = 0 And $info1[$i + 1] = 0 And $info1[$i + 17] = 0 And $info1[$i + 18] = 0 Then
    GUICtrlSetData($doing_label,Round(($i / 204) * 100, 0) & " %)")
    Sleep(50)
    Else
    GUICtrlSetData($doing_label,& Round(($i / 204) * 100, 0) & " %)")
    EndIf
    Next

    [/autoit]


    Zudem war meine frage nicht WO der Fehler liegt sonder WIE ich diesen mit Auslesen lassen kann (StderrRead) oder wowas

  • Aber das Error Handling schlägt doch nicht auf solche Fehler an sonder nur auf

    [autoit]

    $var.Irgendtwas

    [/autoit]
  • Die Normalen Errors aus Funktionen Fragt man mit @error sowie die erweiterten mit @extended , naja in deinem Codeschnipsel scheint kein Fehler zu sein...

    Gruß Marvin

  • Is mir auch bewusst ;)
    Da ich die FUnktion ja selbst geschrieben hab sind keine @errors definiert

    Mir gehts lediglich darum irgendwie diese Absturzmeldung aufzufangen was ja bis jetzt mit dem kleinen Zusatz daoben laufen würde
    Nur Vielleicht gibts dafür ja eine elegantere Lösung

  • Was macht denn das & dadrin?

    [autoit]

    Else
    GUICtrlSetData($doing_label,& Round(($i / 204) * 100, 0) & " %)")
    EndIf

    [/autoit]
  • Achso da hab ich den Code nich ganz kopiert oderso :D

    Eig steht da :

    [autoit]

    Else
    GUICtrlSetData($doing_label,"( "& Round(($i / 204) * 100, 0) & " %)")
    EndIf

    [/autoit]

    Also wenn ich zb das mache :

    [autoit]

    Run(@ScriptDir &"\test.exe /ErrorStdout",@ScriptDir,@SW_HIDE,0x4)

    [/autoit]

    Dann wird der Fehler des programm in der SciTe Console angezeigt und das Fehlerhafte Programm ohne Meldung geschlossen
    Wie bekomm ich diese Meldung aber weiterverarbeitet?

    Edit :
    Wieder was weiter

    [autoit]

    $errorlogger = Run(@ScriptDir &"\test.exe /ErrorStdout",@ScriptDir,@SW_SHOW,0x2)
    $return =""
    While 1
    $return &= StdoutRead($foo)
    If @error Then ExitLoop
    WEnd
    If $return = "" Then Exit
    MsgBox(0,"",$return)

    [/autoit]

    Das gibt aufjedenfall Schonmal Absturzmeldungen wieder
    Geht das nich noch genauer? Bsp kommt nur "Variable used without beeing declared" baer nicht genau welche dies ist

    Einmal editiert, zuletzt von Aldi (7. März 2012 um 17:07)

  • Hi,

    ich halte ehrlich gesagt nicht viel von deiner Taktik die Symptome, nicht aber die Ursache zu bekämpfen. Es gibt sicher eine Lösung, um das Auftreten des Fehlers zu vermeiden, nur ohne den vollständigen Quellcode kann man dir da nicht wirklich helfen.

    Wenn während des Ausführens ein Fehler auftritt, der das Programm zum Absturz bringt, dann wird es wohl nicht möglich sein, das Programm danach korrekt auszuführen.

    Gruß stay

  • Mir gehts ja darum den Fehler zu finden durch die Fehlerbeschreibung ...
    Aber hab ja scheinbar bestmöglichen weg dazu gefunden