Fehler suchen und beheben
Früher oder später werden Sie bei Ihrem Skript auf Probleme treffen: es benimmt
sich nicht so, wie Sie es erwarten oder produziert sogar Fehler- oder Absturzmeldungen. Unter Fehlermeldungen (error messsages) finden Sie eine Listwe von Fehlermeldungen und unter bugs einige generelle Hiweise, was
im Falle eines Absturzes zu tun ist sowie eine komplette Liste von Gamestudio-Bugs.
Wie jedoch finden Sie diese Fehler-"Käferchen" in Ihrem Skript?
- 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. Ist Ihnen der Umgang
mit einem Debugger nicht geläufig, lesen Sie die lite-C-Workshops - zwei
davon beschäftigen sich mit dem Debuggen.
- 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.
► Aktuelle
Online-Version