Fehler suchen und beheben
Früher oder später - in den meisten Fällen früher - wird jeder Programmierer auf Fehler in seinem Skript stossen: es benimmt
sich nicht so, wie es sollte oder produziert sogar Fehler- oder Absturzmeldungen. Kein Grund zur Sorge: die meisten Fehlermeldungen passieren beim Kompilieren der Skriptdatei und zeigen simple Syntaxfehler an. Etwas ist falsch geschrieben oder es wird auf eine nicht existierende Datei oder ein nicht vorhandenes Objekt verwiesen. Die Skriptdatei sowie die fragliche Zeile werden in der Fehlermeldung angegeben und ermöglichen so ein einfaches Korrigieren des Fehlers. Unter error messages finden Sie eine Liste von Fehlermeldungen und unter bugs einige allgemeine Hinweise, was im Falle eines Absturzes zu tun ist sowie eine komplette Liste von Gamestudio-Bugs. Wie aber finden Sie Skriptfehler, die nicht durch Fehlermeldungen angegeben werden?
- Verwenden Sie den SED-Debugger , um mit Einzelschritten
durch Ihren Code zu gehen und Variablen zu beobachten. Wenn Sie SED nicht verwenden, können Sie zum behelfsmässigen Debuggen Unterbrechungskommentarmarken (//!) benutzen. Zum Beobachten des Inhalts globaler Variablen oder Pointer, fügen Sie diese der SED-Beobachtungsliste (Watch List) hinzu. Um eine bestimmte lokale Variable zu beobachten, machen Sie diese global. Ist Ihnen der Umgang
mit einem Debugger nicht geläufig, lesen Sie das Tutorial - zwei
Workshops beschäftigen sich mit dem Debuggen.
- Befreien Sie das Problem von allem Ballast. Entfernen Sie sämtlilchen Code, der Sie verwirren könnte oder der irgendwelche Variablen oder Objekte, die mit dem Problem zusammenhängen beeinflussen könnte. In den meisten Fällen bringt dies bereits die Fehlerquelle zum Vorschein. Unter Coding Mistakes finden Sie eine Liste der üblichsten Anfängerfehler.
- Taucht der Fehler zufallsabhängig auf, prüfen Sie, ob es sich um eine nicht
initialisierte Variable handelt. Benutzen Sie PRAGMA_ZERO und
prüfen Sie, ob dies das Verhalten verändert.
- Setzen Sie warn_level auf seinen höchsten
Wert. Dadurch werden Fehlermeldungen ausgegeben und, wenn Dateien nicht gefunden wurden oder Enginefunktionen aufgrund falscher Parameter fehlschlagen, nicht einfach nur Fehlercode zurückgeliefert
- Um den Status von Variablen oder Pointern an bestimmten Stellen im Code zu überprüfen, verwenden Sie bitte die Funktion draw_text. Wenn sie beispielsweise innerhalb einer wait()-Schleife den Befehl draw_text(str_for_num(NULL,result),10,10,vector(0,0,0)); setzen, wird der Status der Variablen result an dieser Position ständig oben links am Bildschirm in schwarzen Zahlen angezeigt.
- Manchmal ist es wünschenwert, den Status bestimmter Entities während der
Laufzeit zu überprüfen. Vergewissern Sie sich, daß default.c 'includet'
ist. Drücken sie [Shift-F11]. Das Spiel friert ein
und ein Cursor erscheint auf dem Bildschirm. Klicken Sie auf die Entity,
die Sie überwachen wollen. Der Pointer watched wird
auf diese Entity gesetzt, was dafür sorgt, daß ihre Statusanzeige auf dem
Bildschirm erscheint. Durch ein zweites Drücken von [Shift-F11] wird
das Spiel wieder aufgenommen, die Statusanzeige wird jedoch ständig mit
dem Status der zuletzt angeklickten Entity upgedatet. Wollen Sie die Statusanzeige
wieder loswerden, klicken Sie, während Sie sich im eingefrorenen Modus befinden,
an eine leere Stelle.
- Um die Umstände herauszufinden unter denen sich eine bestimmte globale Variable sich verändert hat, setzen Sie Variablen-Vergleichsausdrücke an alle verdächtigen Stellen innerhalb Ihrer wait-Schleife.
- Wenn Ihr Skript unerwartet endet und sie ein Hardwareproblem mutmassen, starten Sie Ihr Skript mit der -diag-Kommandozeilenoption und prüfen Sie danach den acklog.txt. Verhält sich Ihr Skript falsch und das Debuggen hilft nicht, setzen Sie diag()-
oder diag_var()-Aufrufe in Ihre Funktionen. Auf
diese Weise können Sie problematische Skriptzeilen isolieren. Das hilft auch
beim Finden des Bugs, wenn Ihr Skript zufällige Abstürze verursacht.
- Friert ihr Skript ein oder stürzt ab - womöglich bereits beim Kompilieren - liegt der Fehler in fast allen Fällen an einer fehlerhaften externen Datei, wie etwa einem beschädigtes Modell, Bild oder einer defekten Sound-Datei. Prüfen Sie ob das Problem nur bei Ihrem eigenen Projekt auftaucht oder auch mit den mit Gamestudio mitgelieferten Beispielen. Läuft überhaupt kein Skript, prüfen Sie bitte die DEP-Einstellungen auf Ihrem PC.
- Haben Sie ständig hartnäckige Probleme, Ihr Skript vernünftig zum Funktionieren zu bringen, sollten Sie vielleicht in Betracht ziehen, dass das Spiele-Programmieren nicht unbedingt das Richtige für Sie ist.
► Aktuelle
Online-Version