AutoIT .exe Datei debuggen

  • Hallo,

    ich habe eine compilierte AuoIT .exe Datei und ein dazugehöriges .au3 File.

    Das compilierte Programm lief nun seit gut 2 Jahren im Produktiveinsatz und hin und wieder wurde kleine Updates und Anpassungen vorgenommen. Seit dem letzten Update lief das Programm 4-5 Monate Problemlos. Doch seit ein paar Tagen bekomm ich hin und wieder diese Fehlermeldung (siehe Anhang).

    Nun ist es so, das wenn ich die .au3 Datei ausführe und live schauen möchte wo der Fehler liegt ich diesen nicht hervorrufen kann. zudem kommt noch hinzu, das bei der Fehlermeldung eine Zeilenangabe gemacht wird die es in der au3. Datei uncompiliert so gar nicht gibt. Ich nehme an dise kommt durch die Include Dateien im compilierten Zustand.

    Jetzt ist aber die Frage wie debugge ich diese .exe Datei, bzw. das Script. Wie bekomm ich heraus was Zeile 5343 in meinem .au3 Script ist, welches nur ca. 700 Zeilen hat. Der Fehler ist eigentlich sehr eindeutig, aber beim compilieren des .au3 Scripts wurde kein Fehler ausgebene etc.

    Vllt. könnt ihr mir sagen wie ich dazu am besten Vorgehe.
    Vielen Dank, Albeck

  • Fehler in Zeile 5343 bei einem 700 Zeilen Code ist relativ normal, da die ganzen Includes auch drin sind . Das hast du richtig erkannt.

    Einmal editiert, zuletzt von SoftCreatR (13. Januar 2012 um 17:28)

  • Immerhin sagt die Fehlermeldung ja aus wo das Problem zu suchen ist, nämlich in einem deiner Arrays. Es bleibt dir wohl nichts anderes übrig als dir alle Arrays einmal anzusehen und zu prüfen ob sie in einem bestimmten Fall, als normale Variable behandelt werden.

    Das es davor lange problemlos funktioniert hat spricht für ein Problem beim lesen von Daten z.B. aus einer Datei, wenn die Datei keinen oder zu wenig Inhalt hat, kann es zu solchen Problemen kommen.

    • Offizieller Beitrag

    Folgender Ansatz:
    Kompiliere es mit der Einstellung "Skript in den Resourcen-Dateien unterbringen". Das dürfte die "Langversion" (mit Includes) sein, die dann letztendlich kompiliert wird. Demnach müsste die Zeilennummer hier stimmen. Mit ResHacker kannst du den Quelltext aus der Exe-Datei rausholen (wenn du eben so kompiliert hast).

    Viel Erfolg,
    Johannes

  • In der ersten Zeile deines Scripts nach den Includes ein Fehler einbauen dann compilieren und die Zahl in der Fehlermeldung von der in der echten Fehlermeldung abziehen :D

    Edit:
    Ach ja das gibt dann die Zeilenzahl ohne Lehrzeilen logisch aber man muss es wissen^^

    Einmal editiert, zuletzt von acc4iload (14. Januar 2012 um 01:43)

  • So ich melde mich mal zurück, das Problem besteht leider immer noch.

    Der Ansatz von peethebeehat so nicht funktioniert. Wenn ich das Script compilere mit der Option "Script in Resource Datei unterbringen" und die .exe Datei dann mit dem Resource Hacker öffne wird dort leider auch nur die "Kurzversion" angezeigt...

    Versuch jetzt mal den Lösungsansatz mit einem extra Fehler nach den Includes, habt ihr da evtl. grad mal einen kurzen Programm schnipsel parat der einen Error wirft?

    MfG Albeck

  • Du kannst hiermit alle includes in dein Script einfügen: Another AutoIt PreProcessor
    dann sollte die Zeilennummer (zumindest in etwa) stimmen...


    Die Ausgabe des Obfuscators im Striponly-Modus könnte auch ein passendes Skript produzieren ;)
    Wenn nicht, dann eben dieses zusammengefasste Skript kompilieren, verwenden und auf den Fehler warten.

  • Du kannst ein Error ganze einfach machen

    z.b.

    $blabla =

    Dann beim kompilieren den Fehler ignorieren und die exe ausführen

    dann kommt gleich "Error in expression" und die Zeilen Nummer=)

  • Hi,

    ich hab soeben mit dem "Another AutiIT Preprocessor" (AAPP) mal ein au3. Datei generiert und in diesem bin ich nun auch über 5500 Zeilen jedoch weicht die gsuchte Zeile mit der Nummer 5343 stark von der mit einem offizellem compilier ab. Bzw in der Zeile mit dem AAPP steht überhaupt keine Arrayvariable oder sontiges sondern nur ein Sendkey und eine Suche in dem umliegenden Beriech ist doch sehr grob.


    Gibt es daher so etwas in offizeller Form? Und kann mit jemand das mit dem striponly Mode näher erklären, wie ich das benutzen muss und was passiert etc bzw. was das gnaze Obfuscater eben macht?
    Danke, Albeck

    Edit: @acc4iload: Wenn ich einen Fehler mit $xyz= hervorrufe und beim compilieren den Au3check überspringe und dann die exe Datei starte kommt nur der Fehler Anwendung kann nicht gestartet werden weil die Anwendungskonfiguration nicht korrekt ist, es wird aber keine Zeile ausgegeben...

    Einmal editiert, zuletzt von Albeck (25. Januar 2012 um 16:56)

  • Hallo Albeck,

    wenn du es so nicht hin bekommst und das Script net streng Geheim ist ;) , solltest du dir überlegen es mal zu posten, denn es gibt hier viele Leute die mal eben fix drüber schauen könnten/würden und den Fehler so bestimmt schneller finden können!

    Mfg Ghostleader

  • ich hab soeben mit dem "Another AutiIT Preprocessor" (AAPP) mal ein au3. Datei generiert und in diesem bin ich nun auch über 5500 Zeilen jedoch weicht die gsuchte Zeile mit der Nummer 5343 stark von der mit einem offizellem compilier ab. Bzw in der Zeile mit dem AAPP steht überhaupt keine Arrayvariable oder sontiges sondern nur ein Sendkey und eine Suche in dem umliegenden Beriech ist doch sehr grob.


    Starte das mit dem AAPP generierte Skript und warte auf den Fehler mit der richtigen Zeilennummer ;)

  • Die Ausgabe des Obfuscators im Striponly-Modus könnte auch ein passendes Skript produzieren ;)
    Wenn nicht, dann eben dieses zusammengefasste Skript kompilieren, verwenden und auf den Fehler warten.


    Habe ich seben mit meinem URL-Manager ausgetestet:

    "Url-Manager_Obfuscated"
    [autoit]

    Global Const $GUI_EVENT_CLOSE = -3
    Global Const $GUI_ENABLE = 64
    Global Const $GUI_DISABLE = 128
    Global Const $CBS_AUTOHSCROLL = 0x40
    Global Const $CBS_DROPDOWN = 0x2
    Global Const $CB_INSERTSTRING = 0x14A
    Global Const $CB_SETCURSEL = 0x14E
    Global Const $__COMBOBOXCONSTANT_WS_VSCROLL = 0x00200000
    Global Const $GUI_SS_DEFAULT_COMBO = BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $__COMBOBOXCONSTANT_WS_VSCROLL)
    Global Const $tagPOINT = "long X;long Y"
    Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult")
    Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
    If @error Then Return SetError(@error, @extended, "")
    If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
    Return $aResult
    EndFunc
    Global Const $HGDI_ERROR = Ptr(-1)
    Global Const $INVALID_HANDLE_VALUE = Ptr(-1)
    Global Const $KF_EXTENDED = 0x0100
    Global Const $KF_ALTDOWN = 0x2000
    Global Const $KF_UP = 0x8000
    Global Const $LLKHF_EXTENDED = BitShift($KF_EXTENDED, 8)
    Global Const $LLKHF_ALTDOWN = BitShift($KF_ALTDOWN, 8)
    Global Const $LLKHF_UP = BitShift($KF_UP, 8)
    Func _WinAPI_GetClassName($hWnd)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Local $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hWnd, "wstr", "", "int", 4096)
    If @error Then Return SetError(@error, @extended, False)
    Return SetExtended($aResult[0], $aResult[2])
    EndFunc
    Func _WinAPI_IsClassName($hWnd, $sClassName)
    Local $sSeparator = Opt("GUIDataSeparatorChar")
    Local $aClassName = StringSplit($sClassName, $sSeparator)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Local $sClassCheck = _WinAPI_GetClassName($hWnd)
    For $x = 1 To UBound($aClassName) - 1
    If StringUpper(StringMid($sClassCheck, 1, StringLen($aClassName[$x]))) = StringUpper($aClassName[$x]) Then Return True
    Next
    Return False
    EndFunc
    Func __UDF_DebugPrint($sText, $iLine = @ScriptLineNumber, $err=@error, $ext=@extended)
    ConsoleWrite( _
    "!===========================================================" & @CRLF & _
    "+======================================================" & @CRLF & _
    "-->Line(" & StringFormat("%04d", $iLine) & "):" & @TAB & $sText & @CRLF & _
    "+======================================================" & @CRLF)
    Return SetError($err, $ext, 1)
    EndFunc
    Func __UDF_ValidateClassName($hWnd, $sClassNames)
    __UDF_DebugPrint("This is for debugging only, set the debug variable to false before submitting")
    If _WinAPI_IsClassName($hWnd, $sClassNames) Then Return True
    Local $sSeparator = Opt("GUIDataSeparatorChar")
    $sClassNames = StringReplace($sClassNames, $sSeparator, ",")
    __UDF_DebugPrint("Invalid Class Type(s):" & @LF & @TAB & "Expecting Type(s): " & $sClassNames & @LF & @TAB & "Received Type : " & _WinAPI_GetClassName($hWnd))
    Exit
    EndFunc
    Global $Debug_CB = False
    Global Const $__COMBOBOXCONSTANT_ClassName = "ComboBox"
    Func _GUICtrlComboBox_InsertString($hWnd, $sText, $iIndex = -1)
    If $Debug_CB Then __UDF_ValidateClassName($hWnd, $__COMBOBOXCONSTANT_ClassName)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Return _SendMessage($hWnd, $CB_INSERTSTRING, $iIndex, $sText, 0, "wparam", "wstr")
    EndFunc
    Func _GUICtrlComboBox_SetCurSel($hWnd, $iIndex = -1)
    If $Debug_CB Then __UDF_ValidateClassName($hWnd, $__COMBOBOXCONSTANT_ClassName)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Return _SendMessage($hWnd, $CB_SETCURSEL, $iIndex)
    EndFunc
    Global Const $SS_ETCHEDHORZ = 0x10
    Const $sElect = "bitte eine URL auswählen"
    Global $URL
    If Not FileExists(@ScriptDir & "\URL.INI") Then
    $sData = "AutoIt=http://www.autoit.de" & @LF
    $sData &= "Buch=http://www.autoit.de/index.php?page=Thread&postID=92818#post92818" & @LF
    $sData &= "richtig Posten=http://www.autoit.de/index.php?page=Thread&threadID=4424" & @LF
    $sData &= "Tutorial=http://wiki.autoit.de/wiki/index.php/Tutorial" & @LF
    $sData &= "Skriptfehler finden=http://www.autoit.de/index.php?page=Thread&threadID=13785" & @LF
    $sData &= "Hilfe=http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-09_05_10.zip" & @LF
    $sData &= "MiniUrl-Manger=http://www.autoit.de/index.php?page=Thread&postID=164341#post164341" & @LF
    IniWriteSection(@ScriptDir & "\URL.INI", "URLs", $sData)
    EndIf
    $hGui = GUICreate("MiniUrl-Manager", 300, 90, 302, 218)
    $hcboProg = GUICtrlCreateCombo("", 8, 8, 200, 25)
    $hbtnAdd = GUICtrlCreateButton("&Hinzufügen", 213, 8,80)
    $hbtnDel = GUICtrlCreateButton("&Löschen", 213, 35,80)
    $hlblURL = GUICtrlCreateLabel("", 8, 70, 290,25)
    $hbtnOpen = GUICtrlCreateButton("&Öffnen", 8, 35,200)
    GUICtrlSetState($hbtnOpen, $GUI_DISABLE)
    GUICtrlCreateGraphic(0,65,300,2,$SS_ETCHEDHORZ )
    read_INI()
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hbtnAdd
    $write1 = InputBox("URL", "Bitte eine gültige URL eingeben")
    If $write1 <> "" Then
    $write2 = InputBox("URL verwalten unter", "Bitte Kurzbegriff eingeben")
    If $write2 <> "" Then IniWrite(@ScriptDir & "\URL.INI", "URLs", $write2, $write1)
    GUICtrlSetData($hcboProg, $write2, $write2)
    EndIf
    show_Selection()
    Case $hbtnDel
    $sDel = GUICtrlRead($hcboProg)
    IniDelete(@ScriptDir & "\URL.INI", "URLs", $sDel)
    GUICtrlSetData($hcboProg,"")
    read_INI()
    Case $hcboProg
    show_Selection()
    Case $hbtnOpen
    ShellExecute($URL)
    EndSwitch
    WEnd
    Func read_INI()
    $list1 = IniReadSection(@ScriptDir & "\URL.INI", "URLs")
    ConsoleWrite($list1 & @CRLF)
    if IsArray($list1) Then
    For $i = 1 To $list1[0][0] +1 ;hier erzeuge ich den absichtlichen Laufzeitfehler
    GUICtrlSetData($hcboProg, $list1[$i][0])
    Next
    EndIf
    _GUICtrlComboBox_InsertString($hcboProg,$sElect,0)
    _GUICtrlComboBox_SetCurSel($hcboProg,0)
    EndFunc
    Func show_Selection()
    If GUICtrlRead($hcboProg) = $sElect Then
    GUICtrlSetState($hbtnOpen, $GUI_DI SABLE)
    GUICtrlSetData($hlblURL, "")
    Else
    GUICtrlSetState($hbtnOpen, $GUI_ENABLE)
    $Prog = GUICtrlRead($hcboProg)
    ConsoleWrite("ausgewählt: " & $Prog & @CRLF)
    $URL = IniRead(@ScriptDir & "\URL.INI", "URLs", $Prog, "")
    GUICtrlSetData($hlblURL, $URL)
    EndIf
    EndFunc

    [/autoit]

    das Ergebnis weicht unwesentlich ab, wenn ich zu der angegebenen Zeilennr. die Anzahl der Includes im Originalskript:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page…4341#post164341

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

    Skriptbeispiel für den Umgang mit INI-Files und ComboBox
    #ce ----------------------------------------------------------------------------

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

    #include <GUIConstantsEx.au3>
    #Include <GuiComboBox.au3>
    #include <StaticConstants.au3>

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

    Const $sElect = "bitte eine URL auswählen"
    Global $URL

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

    If Not FileExists(@ScriptDir & "\URL.INI") Then
    $sData = "AutoIt=http://www.autoit.de" & @LF
    $sData &= "Buch=http://www.autoit.de/index.php?page=Thread&postID=92818#post92818" & @LF
    $sData &= "richtig Posten=http://www.autoit.de/index.php?page=Thread&threadID=4424" & @LF
    $sData &= "Tutorial=http://wiki.autoit.de/wiki/index.php/Tutorial" & @LF
    $sData &= "Skriptfehler finden=http://www.autoit.de/index.php?page=Thread&threadID=13785" & @LF
    $sData &= "Hilfe=http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.1-Stand-09_05_10.zip" & @LF
    $sData &= "MiniUrl-Manger=http://www.autoit.de/index.php?page=Thread&postID=164341#post164341" & @LF
    IniWriteSection(@ScriptDir & "\URL.INI", "URLs", $sData)
    EndIf

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

    $hGui = GUICreate("MiniUrl-Manager", 300, 90, 302, 218)
    $hcboProg = GUICtrlCreateCombo("", 8, 8, 200, 25)
    $hbtnAdd = GUICtrlCreateButton("&Hinzufügen", 213, 8,80)
    $hbtnDel = GUICtrlCreateButton("&Löschen", 213, 35,80)
    $hlblURL = GUICtrlCreateLabel("", 8, 70, 290,25)
    $hbtnOpen = GUICtrlCreateButton("&Öffnen", 8, 35,200)
    GUICtrlSetState($hbtnOpen, $GUI_DISABLE)
    GUICtrlCreateGraphic(0,65,300,2,$SS_ETCHEDHORZ )
    read_INI()
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hbtnAdd
    $write1 = InputBox("URL", "Bitte eine gültige URL eingeben")
    If $write1 <> "" Then
    $write2 = InputBox("URL verwalten unter", "Bitte Kurzbegriff eingeben")
    If $write2 <> "" Then IniWrite(@ScriptDir & "\URL.INI", "URLs", $write2, $write1)
    GUICtrlSetData($hcboProg, $write2, $write2)
    EndIf
    show_Selection()
    Case $hbtnDel
    $sDel = GUICtrlRead($hcboProg)
    IniDelete(@ScriptDir & "\URL.INI", "URLs", $sDel)
    GUICtrlSetData($hcboProg,"")
    read_INI()
    Case $hcboProg
    show_Selection()
    Case $hbtnOpen
    ShellExecute($URL)
    ;ConsoleWrite($URL & @CRLF)
    EndSwitch
    WEnd

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

    Func read_INI()
    $list1 = IniReadSection(@ScriptDir & "\URL.INI", "URLs")
    ConsoleWrite($list1 & @CRLF)
    if IsArray($list1) Then
    For $i = 1 To $list1[0][0] +1 ;hier erzeuge ich den absichtlichen Laufzeitfehler
    GUICtrlSetData($hcboProg, $list1[$i][0])
    Next
    EndIf
    _GUICtrlComboBox_InsertString ($hcboProg,$sElect,0)
    _GUICtrlComboBox_SetCurSel($hcboProg,0)
    EndFunc ;==>read_INI

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

    Func show_Selection()
    If GUICtrlRead($hcboProg) = $sElect Then
    GUICtrlSetState($hbtnOpen, $GUI_DISABLE)
    GUICtrlSetData($hlblURL, "")
    Else
    GUICtrlSetState($hbtnOpen, $GUI_ENABLE)
    $Prog = GUICtrlRead($hcboProg)
    ConsoleWrite("ausgewählt: " & $Prog & @CRLF)
    $URL = IniRead(@ScriptDir & "\URL.INI", "URLs", $Prog, "")
    GUICtrlSetData($hlblURL, $URL)
    EndIf
    EndFunc ;==>show_Selection

    [/autoit]

    hinzuzähle stimmt es genau. Ob dies jetzt Zufall ist wage ich zu bezweifeln habe es aber nch nicht mit anderen Skripten ausprobiert,

    mfg auoBert

  • Test Code
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=GUICreate versteckter Fehler.exe
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_Tidy=y
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Example1()
    Example2()

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

    ; example 1
    Func Example1()
    Local $msg

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

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()
    EndFunc ;==>Example1

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

    ; example 2
    Func Example2()
    Local $sFile = "..\GUI\logo4.gif"

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

    Local $gui = GUICreate("Background", 400, 100)
    ; background picture
    GUICtrlCreatePic("..\GUI\msoobe.jpg", 0, 0, 400, 100)

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

    GUISetState(@SW_SHOW)

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

    ; transparent MDI child window
    GUICreate("", 169, 68, 20, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    ; transparent pic
    GUICtrlCreatePic($sFilefehler, 0, 0, 169, 68) ; Fehler der gesucht wird
    GUISetState(@SW_SHOW)

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

    Do
    Local $msg = GUIGetMsg()

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

    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example2

    [/autoit]
    Test Code mit Fake Fehler
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=GUICreate Fake fehler.exe
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_Tidy=y
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $lala = ;Fake Fehler
    Example1()
    Example2()

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

    ; example 1
    Func Example1()
    Local $msg

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

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()
    EndFunc ;==>Example1

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

    ; example 2
    Func Example2()
    Local $sFile = "..\GUI\logo4.gif"

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

    Local $gui = GUICreate("Background", 400, 100)
    ; background picture
    GUICtrlCreatePic("..\GUI\msoobe.jpg", 0, 0, 400, 100)

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

    GUISetState(@SW_SHOW)

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

    ; transparent MDI child window
    GUICreate("", 169, 68, 20, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    ; transparent pic
    GUICtrlCreatePic($sFilefehler, 0, 0, 169, 68) ; Fehler der gesucht wird
    GUISetState(@SW_SHOW)

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

    Do
    Local $msg = GUIGetMsg()

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

    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example2

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    Fehlermeldung der beiden exe dateien

    Differenz 18 der Fehler muss in Zeile 19 sein

    Code ohne Fake Fehler/Includes/Komentarzeilen/Lehrzeilen
    [autoit]


    Example1()
    Example2()
    Func Example1()
    Local $msg
    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUISetState(@SW_SHOW) ; will display an empty dialog box
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()
    EndFunc ;==>Example1
    Func Example2()
    Local $sFile = "..\GUI\logo4.gif"
    Local $gui = GUICreate("Background", 400, 100)
    GUICtrlCreatePic("..\GUI\msoobe.jpg", 0, 0, 400, 100)
    GUISetState(@SW_SHOW)
    GUICreate("", 169, 68, 20, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    GUICtrlCreatePic($sFilefehler, 0, 0, 169, 68) ; Fehler der gesucht wird
    GUISetState(@SW_SHOW)
    Do
    Local $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example2

    [/autoit]

    und siehe da Fehler gefunden :thumbup:

  • Hallo acc4iload

    Ich habe Dein beschriebenes Verfahren soeben bei einer meiner Scripts getestet, welches ab und zu auch mal einen Fehler bringt.
    (Nur wenn der Benutzer innerhalb der ersten paar Millisekunden nach dem Programmstart eine bestimmte Tastenkombination drückt)

    Mit Hilfe dieser Methode habe ich den Fehler nun herausgefunden!
    Die Zeile stimmte exakt! Vielen Dank!

    Gruss, Veronesi

  • Hallo,

    ich habe nun den Fehler bzw. die Zeile in meinem Script lokalisiert ( ich sag jetzt mal mit Hilfe von Drittherstellertools ). Jedoch finde ich dort keinen Fehler.

    Das Problem ist ja auch das ich den Fehler nicht so einfach reproduzieren kann und er nur unter vagen Umständen entsteht... deshalb ist da mit dem Fake Script und auf den Fehler warten nicht so ne gute Idee.

    Wie dem auch sei, der Fehler ist lokalisiert aber ich für meinen Teil finde dort keinen Fehler. Deshalb wäre ich um Hilfe von eure Seite dankbar. Jedoch kann ich das Script hier nicht so öffentlich posten, da wie schon erwähnt es in einem produktiven Umfeld läuft.

    Wer sich der Sache annehmen möchte, dem würde ich das Script und eine genauere Beschreibung des Umstandes unter dem der Fehler auftritt zukommen lassen. Also bitte per PN melden bei Interesse.

    Tut mir leid für die Geheimniskrämerei aber ich unterliege dabei auch gewissen Unternehmensauflagen.
    Danke, Albeck

  • Wer sich der Sache annehmen möchte, dem würde ich das Script und eine genauere Beschreibung des Umstandes unter dem der Fehler auftritt zukommen lassen. Also bitte per PN melden bei Interesse.

    Tut mir leid für die Geheimniskrämerei aber ich unterliege dabei auch gewissen Unternehmensauflagen.


    Dann wäre dies ja etwas für die Jobbörse mit Gegenleistung, da der Betreffende dann sicher auch eine schriftliche Verschwiegenheitserklärung abgeben soll.

    mfg autoBert

    • Offizieller Beitrag

    Ich vermute ganz stark, dass der Fehler an sich nicht existiert, also die Stelle, die den Fehler hervorbringt selbst ordentlich arbeitet.
    Vermutlich werden aber fehlerhafte Daten zur Abarbeitung übergeben (kein oder nicht richtig dimensioniertes Array).
    Abhilfe: im Skript vor der Abarbeitung von Arrays überprüfen ob überhaupt ein Array verwendet wird und ob die Dimensionen stimmen.