Sibyl - Unklare Fehlermeldung

(DE) Anwendungen für Office, Multimedia und Spiele, Werkzeuge, Hilfsprogramme, etc
(EN) Applications for Office, Multimedia or Games, Tools, Utilities, e.g.
User avatar
ThomasOF
Posts: 240
Joined: Mon 20. Jan 2014, 19:26
Location: Offenbach

Sibyl - Unklare Fehlermeldung

Post by ThomasOF »

Hallo,

habe beim Compilieren in Sibyl folgende Fehlermeldung bekommen:

Internal Error (Undefined Label in Make_Undefs zeile=340)

und kann damit nix anfangen. Zeile 340 lautet:

procedure TGrafikausgabe.FormCreate(Sender: TObject);

Der Fehler tritt im Original-Sibyl 2.0 genauso auf wie im jüngsten WD-Sibyl. Alle IFDEF's sind korrekt mit ENDIF abgeschlossen.

Was kann ich tun?

ThomasOF

User avatar
Rolf
Posts: 71
Joined: Wed 15. Jan 2014, 21:58
Location: Rapperswil / Jona (Switzerland)

Post by Rolf »

Hast Du die DEFINES in der IDE unter Projekt > Eintellungen > Compiler "Bedingte Compilierung" gemacht?
Das scheint nur zu funktionieren, wenn dort lediglich eine Definition steht
und nicht mehrere.
Ich würd's unbedingt immer direkt im Source mit $DEFINE <Name> machen.

Ansonsten würd ich versuchen so lange bestimmte Bereiche mit (* ... *)
zu deaktivieren bis Du irgendwo ein Problem entdeckst. Oft hat man
in den vorangegangenen Zeilen etwas vergessen.

Rolf

Martin Vieregg
Posts: 409
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg »

Der "Internal Error" ist ein nicht abgefangener Compiler-Error, also im Prinzip ein Fehler des Compilers. Eine weitere Taktik ist es, den Compiler zum Stoppen zu zwingen, indem man im Quelltext mit einer unsinnigen Zeichenfolge wie "blabla" den Compiler zum Aufgeben zwingt und dann diese Zeichenfolge an verschiedenen Stellen des Quelltextes wandern lässt, bis man weiß, an welcher Stelle der "internal error" auftrat.

aschn
Posts: 1311
Joined: Wed 25. Dec 2013, 22:47

Post by aschn »

Ich kann zwar kein Pascal, aber es sind sind doch immer wieder die gleichen Fehler: Tippfehler bei Variablennamen, undeklarierte Variablen, vergessene Endanweisung. (Bei C ist das bei mir häufig das fehlende Semikolon. So etwas ist beim abermaligen Durchgucken schlecht zu finden. Der Simikolonfehler scheint in C häufig zu sein, sonst wäre die Fehlermeldung dafür nicht perfekt.) Die Compilermeldungen sind nicht immer zutreffend, weil sie manchmal erst bei Folgefehlern auftauchen. Also, alles so wie bereits von Martin und Rolf geschrieben: Teile auskommentieren, bis der Fehler nicht mehr auftritt.

(Damit ein Kompiler brauchbare Fehlermeldungen erzeugt, muss schon ein erheblicher Aufwand betrieben werden, da schon die Variablennamen nicht allgemein bekannt sind.)

(Beim Interpreter sieht es anders aus, weil da meistens die Variablen bekannt sind. Interpreter-Fehlermeldungen sind viel passender. Vielleicht ist das auch mit ein Grund, weshalb Debugger für Compiler entwickelt wurden.)

Um Tippfehler bei der Syntax zu minimieren, bei Variablen geht es häufig erst im Debugger, womit ich mich nicht auskenne, würd ich zumindest einen Editor verwenden, der Syntaxhighlighting hat und passende Klammern findet oder hervorhebt. Die Klammerfehler sind nicht selten. (Bei Pascal kommt AFAIR dazu, dass neben runden auch geschweifte Klammern verwendet werden. Klammern sind auf deutschsprachiger Tastatur nicht so leicht zu tippen.) Häufig entsteht das Ganze dadurch, dass man aus funktionierendem Code einen Block herauskopiert, dabei aber übersieht, dass z.B. eine Endanweisung, wie ein FI, zuviel vorhanden ist. Also sollten nicht nur Klammern, sondern auch Bedingungen hergehoben werden können. Bei einer Endanweisung zu viel sind die Fehlermeldungen sicherlich auch irreführend.
Andreas Schnellbacher

Martin Vieregg
Posts: 409
Joined: Tue 19. Aug 2014, 09:30

Post by Martin Vieregg »

Der "Internal Error" ist bei Sibyl wirklich ein Fehler im Compiler, nicht ein Fehler im zu übersetzenden Quelltext. Das kann etwa vorkommen, wenn man eine If-Bedigung mit mehreren Ebenen-Verschachtelungen über mehrere Programmzeilen schreibt, dann gibt es wohl einen Überlauf von Speicherregistern. Es kommt aber so selten vor, dass es nicht wirklich einschränkt. Ein bißchen umformulieren, und dann geht es wieder.