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.
Antworten
Benutzeravatar
ThomasOF
Beiträge: 257
Registriert: Mo 20. Jan 2014, 19:26
Wohnort: Offenbach
Kontaktdaten:

Sibyl - Unklare Fehlermeldung

Beitrag von 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
Benutzeravatar
Rolf
Beiträge: 71
Registriert: Mi 15. Jan 2014, 21:58
Wohnort: Rapperswil / Jona (Switzerland)

Beitrag von 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
Beiträge: 459
Registriert: Di 19. Aug 2014, 09:30

Beitrag von 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.
Benutzeravatar
aschn
Beiträge: 1363
Registriert: Mi 25. Dez 2013, 22:47

Beitrag von 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
Beiträge: 459
Registriert: Di 19. Aug 2014, 09:30

Beitrag von 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.
Antworten