fehlermeldung (Array + linenumber) <- wie finde ich die stelle im source?

  • ich würde gerne wissen wie ich eine fehlermeldung auswerte die bei einem funktionsaufruf der kompilierten exe auftritt ... leider kann ich den fehler so kaum reproduzieren, da er bei mir sehr selten auftritt. - bei einem freund aber öfters.
    die fehlermeldung lautet:
    Autoit Error
    Line 14294: (programmpfad)
    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded

    Wie kann ich nun die richtige codezeile finden ? - mein programm ist zwar schon recht umfangreich hat aber keine 14295 zeilen!

  • Hallo WhiteLion.
    Führ dein Skript doch mal als unkompiliertes Skript in SciTE (F5) aus, dann sollte SciTE eigentlich die richtige Fehlerzeile zurückgeben.

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Der Fehler liegt bei einem array. Poste mal dein Skript, vielleicht, hast du ein bestimmtes Element eines Arrays aufgerufen, dass nicht immer existiert.

    Wenn das Skript noch nicht kompilliert ist, siehst du die richtige Zeile.

  • Hallo WhiteLion.
    Führ dein Skript doch mal als unkompiliertes Skript in SciTE (F5) aus, dann sollte SciTE eigentlich die richtige Fehlerzeile zurückgeben.


    tut er eben nicht ... das script läuft bei mir fast immer fehlerfrei.

    [autoit]

    #include <Array.au3>

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

    ; Erstellt Callback Funktion
    Global $editofconsole, $tempconsoletext, $pidofconsole, $titleofconsole
    $handleconsole = DLLCallbackRegister ("_EnumWindowsProc", "int", "hwnd;lparam")

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

    ; EnumWindows aufrufen
    DllCall("user32.dll", "int", "EnumWindows", "ptr", DllCallbackGetPtr($handleconsole), "lparam", 10)

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

    ; Löscht Callback-Funktion
    DllCallbackFree($handleconsole)

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

    ; Callback Verfahren
    Func _EnumWindowsProc($hWnd000, $lParam)
    Global $tempconsoletext, $pid, $hhh = 0
    If WinGetTitle($hWnd000) <> "" And BitAnd(WinGetState($hWnd000), 2) Then

    ;$res = MsgBox(0, WinGetTitle($hWnd), "$hWnd=" & $hWnd & @CRLF & "lParam=" & $lParam & @CRLF & "$hWnd(type)=" & VarGetType($hWnd))

    ;$EnumWindowresult[$x] = WinGetTitle($hWnd), "$hWnd=" & $hWnd & @CRLF & "lParam=" & $lParam & @CRLF & "$hWnd(type)=" & VarGetType($hWnd))
    Local $text2 = WinGetClassList(WinGetTitle($hWnd000), "Logfile opened on")
    if $text2 <> "" then $tempconsoletext = $text2 ;
    if $text2 <> "" then $titleofconsole = WinGetTitle($hWnd000)
    if $text2 <> "" then $pidofconsole = WinGetProcess($titleofconsole)
    ;MsgBox(0, "", $title & " " & $pid)
    ;if $text <> "" then $pid = WinGetProcess($hWnd)
    $hhh=$hhh+1
    ;If $res = 2 Then Return 0 ; Wenn Abbrechen geklickt, Rückgabe 0 zum Stoppen der Aufzählung
    EndIf

    Return 1 ; Rückgabe 1 um die Aufzählung fortzusetzten
    EndFunc

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

    $edithandlearray = StringSplit($tempconsoletext, @LF)
    ;_ArrayDisplay($edithandlearray)
    if IsArray($edithandlearray) Then $editofconsole = $edithandlearray[$edithandlearray[0]-2]
    MsgBox(0, "PID was:", $pidofconsole)
    MsgBox(0, "PID was:", $titleofconsole)
    MsgBox(0, "Handle was:", $editofconsole)
    ;_ArrayDisplay($IO)
    ;Wingetprocess
    ;~ $text = WinGetClassList("[CLASS:Notepad]", "")
    ;~ MsgBox(0, "Text read was:", $text)

    [/autoit]
  • Dann nehm mal in deinem umkompilierten Script die #include blablabla Zeilen raus und füg die Includes am Anfang manuell ein. Dann suchst du Zeile 14294 und suchst da den Fehler.

  • Hallo WhiteLion,

    dein Skript lässt sich bei mir erst gar nicht starten. Fehlerausgabe Scite-Console:

    Code
    "C:\Programme\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Programme\AutoIt3\Examples\Tests\EnumWndProc.au3" /autoit3dir "C:\Programme\AutoIt3" /UserParams    
    +>12:46:06 Starting AutoIt3Wrapper v.2.0.1.24    Environment(Language:0407  Keyboard:00000407  OS:WIN_XP/Service Pack 3  CPU:X86 OS:X86)
    >Running AU3Check (1.54.19.0)  from:C:\Programme\AutoIt3
    +>12:46:07 AU3Check ended.rc:0
    >Running:(3.3.6.1):C:\Programme\AutoIt3\autoit3.exe "C:\Programme\AutoIt3\Examples\Tests\EnumWndProc.au3"    
    C:\Programme\AutoIt3\Examples\Tests\EnumWndProc.au3 (38) : ==> Array variable subscript badly formatted.:
    if IsArray($edithandlearray) Then $editofconsole = $edithandlearray[$edithandlearray[0]-2]
    if IsArray($edithandlearray) Then $editofconsole = $edithandlearray[^ ERROR
    ->12:46:09 AutoIT3.exe ended.rc:1
    >Exit code: 1    Time: 8.866

    du solltest so abändern:

    [autoit]

    if IsArray($edithandlearray) Then
    if $edithandlearray[0] > 1 then $editofconsole = $edithandlearray[$edithandlearray[0]-2]
    EndIf

    [/autoit]

    da bei mir das Array nur 1 Wert (Leerstring) enthält,

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (25. Juli 2010 um 13:04)

  • Hallo zusammen

    ich habe ein ähnliches Problem wie der Themeneröffner.
    Bei mir (und auch teilweise bei anderen) läuft mein Programm. Jedoch leider nicht überall.
    Die Fehlermeldung: "Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded."
    Die Begründung: "Fehler: Der Arrayvariablenaufruf hat den Index oder die Dimension überschritten." habe ich auch im Internet gefunden.
    Mein Problem: die Fehlermeldung gibt den Fehler in der Line 4004 aus. Mein Script hat aber nur 225 Zeilen.

    Dann nehm mal in deinem umkompilierten Script die #include blablabla Zeilen raus und füg die Includes am Anfang manuell ein. Dann suchst du Zeile 14294 und suchst da den Fehler.

    Leider werde ich aus diesem Tip, der bereits erwähnt wurde nicht schlau und im Gegensatz zu WitheLion habe ich noch nicht verstanden, worauf sich die Line-Number bezieht.

    Kann mir das jemand etwas genauer erläutern?

    Besten Dank und Gruss,
    hootch

  • @hootch,

    dann mach einen eigenen Thread auf, poste dort dein komplettes Skript (bzw. ein Beispiel bei dem der Fehler auch vorkommt), evtl, INI-File/Daten-Dateien und die exakte Fehlerbeschreibung (aus Scite-Konsole kopieren). Fehler die erst zur Laufzeit auftreten sind zwar schwer zu finden, deuten aber auf eine unsaubere Programmierung. Mit

    [autoit]

    IsArray

    [/autoit]

    & Co9. kann man dies vermeiden,

    mfg (Auto)Bert

  • Die Zeilennummer ergibt sich aus allen inkludierten Dateien und deinem Skript.
    Entferne die #includes und füge den Inhalt der entsprechenden Dateien am Anfang deines Skripts ein.
    Tritt der Fehler auf, wird dir die tatsächliche Zeilennummer im Editor ausgegeben.

  • @ideas2code

    Vielen Dank für deine Antwort!
    Jetzt habe auch ich verstanden, was das mit der Line-Number auf sich hat!