Syntaxfehler in Macros

Für allgemeine Fragen zur Programmierung mit PureBasic.
Toshy
Beiträge: 710
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Syntaxfehler in Macros

Beitrag von Toshy »

Hallo Leute.

Da ich länger keine kleinen Helfer programmierte, er innere ich mich nicht so ganz an alle Verhaltensmuster des Debuggers.

Ich habe ja im Bugforum gerade über das "Falten in Macros" geschrieben.

Was mir jetzt noch die Tage aufgefallen ist, wenn ich einen Syntaxfehler in einem großen (oder kleinen ) Makro habe (z.B. vergessene "Klammer zu") wird mir der Syntaxfehler immer an der STelle angezeigt, wo der Macroaufruf ist, nicht an der eigendlichen Fehlerstelle.
Die Fehlersuche ich dann eine reine Katastrophe.

Bei bestimmten Fehlern (leider zu selten, daher weiß ich gerade nicht welche das sind).
Kommt bei einem Fehler innerhalb eines Macros ein Extra Fehlerfenster auf, den Fehler innerhalb des Macros anzeigt.

Im Regelfall aber wird der Syntaxfehler beim Aufruf des Macros angezeigt, also die Zeile angezeigt.

Ist das schon immer so gewesen, oder nur bei der aktuellen PB Version?

Gruß Toshy

Leider konnte ich den Fehler noch NICHT nachvollziehbar machen.
Wenn ich das so verkürzt mache wie im folgenden Beispiel, so wird zwar der Fehler "in Zeile 31" diagnostiziert und angezeigt, aber es wird ein extra Fehlerfenster für das Macro geöffnet.

Code: Alles auswählen

Macro test
  ;{
  If 1;
     ;{
    If 1;
        ;{
      If 1 ;
           ;{
        If 1;
            ;{
          If 1;
              ;{
            If 1;
              Debug "
            EndIf;
                 ;}  
          EndIf  ;
                 ;}  
        EndIf
        ;}  
      EndIf
      ;}  
    EndIf
    ;}  
  EndIf
  ;}
EndMacro



test
Innherhalb meines Codes passiert das so gut wie nie.

Nachtrag:
Was rede ich, kaum ist man fertig, da bekommt man es doch noch nachvollziehbar hin.

Fehlerzeile 36. Aber kein Macrofehlerfenster.

Wenn ich das jetzt mit dem "Faltungsfehler in Macros" vergleiche, kann es sein, das die IDE und der "Parser" oder wie man den Programmteil nennt, Macros nicht "korrekt" abarbeitet?
Macro _debug(DebugLevelB,DebugText)
EndMacro


Macro test
;{
If 1;
;{
If 1;
;{
If 1 ;
;{
If 1;
;{
If 1;
;{
If 1;
;Debug "
_Debug(5,"" ; 5 = normale Programminfos. was gerade geschied. eher als log gedacht)
EndIf ;
;}
EndIf ;
;}
EndIf
;}
EndIf
;}
EndIf
;}
EndIf
;}
EndMacro


test

Nachtrag:
"Faltungsfehler":
viewtopic.php?f=20&t=32291
1. AMD Athlon II X2 250P,4GB-RAM,WinXP
2. Notebook,500mhz,128MB-RAM,WINXP
3. WHS 2003
Inet: 6Mbit Down/386Kbit Up,Flat
PB4.60
Messenger: Trillian
Benutzeravatar
#NULL
Beiträge: 2219
Registriert: 20.04.2006 09:50

Re: Syntaxfehler in Macros

Beitrag von #NULL »

Die Makros werden erst an jeder entsprechende Stelle des 'Aufrufs' aufgelöst, das heißt die Parameter werden genommen und das Makro 'eingesetzt'. Erst dann wird der Code weiter geparst und Fehler angezeigt.

Hier z.B.:

Code: Alles auswählen

Macro a
  "
EndMacro

Macro b
  "
EndMacro

s.s = a string b

; error:
;s.s = a
..funktionieren die Makros, wenn sie richtig verwendet werden. Fehler treten nur je nach Kontext auf, z.B. wenn man nur eines der Makros einzeln verwendet. Es wäre also nicht immer sinnvoll, den Fehler im Makro-Body in der Definition anzuzeigen.

Warum bei manchen Fehlern das aufgelöste Makro im extra Fenster nicht angezeigt wird weiß ich auch nicht genau. Vielleicht wegen dem Schachteln (Makroaufruf in Makro), oder weil er versucht mehrere Zeilen zu übergeben. Die ganzen EndIf Zeilen werden wahrscheinlich versucht dem 2. Makro als 2. Parameter mitzuübergeben. Vielleicht sogar auch das EndMacro. Oder das EndMacro beendet die erste Makro-Definition, wobei der Aufruf des 2. Makros noch gar nicht abgeschlossen ist durch die fehlende schließende Klammer.
my pb stuff..
Bild..jedenfalls war das mal so.
Toshy
Beiträge: 710
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Re: Syntaxfehler in Macros

Beitrag von Toshy »

Makros funktionieren bei mir ja auch. Schon immer.
Daher scheine ich sie wohl richtig zu verwenden ;-)

Sogar ein Makroaufruf innerhalb eines Makros (wie bei meinem "eigenen Debug") funktionierte immer.

Nur die Fehleranzeige innerhalb eines Makros das durch ein Makro aufgerufen wurde, funktioniert nicht richtig.

Auf diesen Versuch bin ich nach ihrem Kommentar gekommen.

"Wenn der Aufruf von Makros funktioniert" und wenn die "Fehleranzeige des Parsers (oder wie man das nennt) / Kompelierer in Makros" funktioniert, ging ich halt davon aus, das die Kombination von beidem auch funktioniert. Denkste...

Der "Parser" (und nur dieser) kommt wohl bei "Makros in Makros" durcheinander.

Jetzt ist wenigstens die Fehlerquellenart gefunden.

Das erleichtert mir die Fehlersuche, da ich dann nur den Aufruf bzw. die Untermakros überprüfen muß. Was bei mir an ich in der Regel nur meine eigenen "Fehlerroutinen" bzw. Debugroutinen sind.

Dennoch ein wenig nervig.

Besonders da ich mein eigenes "error()" der Geschwindigkeit wegen als Makro ausgeführt habe und sehr oft verwende. "_Debug" eh massig verwende.

Ich überprüfe die Tage noch mal, ob es wirklich nur in diesen Fällen auftritt und am der "Kompelierer"-Verarbeitungsweise liegt, und dann will ich mal schauen, ob ich das auf Englisch im englischen Forum ansprechen kann. Oder ob einer aus dem "PB-Team" hier noch mitliest oder angeschrieben werden kann.

Ich vermute, das dieses "Verschachtelungsproblem" des Kompelierers nicht "Absicht" ist, da "Makro in Makro" ja schon funktioniert. (Makros können sich halt nur, im Gegensatz zu Proceduren, nicht selbst aufrufen).

In dem Fall war mein eines Makro (Code gerade angefangen) nur grob 150 Zeilen lang, dann aber die Fehlerstelle zu finden war echt fast unmöglich, da der Fehler nicht beim Programmsausführen erfolgte, konnte ich auch nicht den Debugger nutzen!!!

Mir blieb nur übrig, das Makro zu entfernen und überall im Code anstelle des Markros den Code direkt einzufügen, die Fehler zu beseitigen und dann wieder alles rückgängig machen.

Das ist irgendwie "nervig".
1. AMD Athlon II X2 250P,4GB-RAM,WinXP
2. Notebook,500mhz,128MB-RAM,WINXP
3. WHS 2003
Inet: 6Mbit Down/386Kbit Up,Flat
PB4.60
Messenger: Trillian
Antworten