Benutzer-Werkzeuge

Webseiten-Werkzeuge


godot:projekt:debugger

Debugger

Generell unterteilt Godot in Fehler(roter Punkt) und Warnungen(gelber Punkt).

Auflistung

Alle Warnungen und Fehler können wir unter Debugger ⇒ Fehler in einer zeitlichen Abfolge einsehen. Dabei werden wir sehen, dass trotz Unmengen an Warnungen unsere Anwendung absturzfrei läuft. Was bei Fehlern meist nicht mehr der Fall ist, weswegen wir uns um “Fehler“ sofort kümmern sollten. “Warnungen“ hingegen können wir uns in einem späterem Stadium des Feinschliffes ansehen.

Während im Debugger lediglich die Meldungen auflaufen, können wir an dieser Stelle keinen Einfluss nehmen. Wir können hier lediglich den Zeitpunkt erkennen und eine kurze Warnbeschreibung lesen. Ein Klick auf eine entsprechende Zeile wechselt bei bedarf ins entsprechende Skript.

Unterhalb des Skript-Editors ist im Falle einer Warnung, auf der rechten unteren Seite ein gelbes Warndreieck zu sehen(die Zahl dahinter sagt uns die Anzahl der Warnungen). Klicken wir auf dieses Warndreieck, zeigt uns dies eine Liste aller Warnungen an. Hierbei wird links in gelber Schrift die Zeile und den Typ der Warnung angezeigt. Klicken wir auf diesen Bereich wird zu der entsprechenden Zeile gesprungen.

Auf der rechten Seite steht in Klammern (ignorieren), klicken wir hierauf, wird das Skript an der Fehlerstelle um eine zusätzliche Skriptzeile erweitert, wodurch die Warnung unterdrückt wird.

Per Skript auslösen

Beide Arten können wir per Skript auch selber auslösen.

push_error("Dies war ein schwerer Fehler") # rot
push_warning ("Dies ist nur eine Warnung") # gelb

Warnungen unterdrücken

Einige Warnungen kann man auch gänzlich ignorieren. Dies sollte man jedoch gut überlegt tun.

Projekteinstellungen

Systembedingt können wir diese Meldungen insgesamt ausschalten unter: Menü(Projekt)⇒Menüpunkt(Projekteinstellungen) ⇒Dialogfenster Reiter(Allgemein)⇒ Baumansicht(Debug)⇒Gdscript

Werden uns alle Warnungsarten aufgelistet und nach reichlicher Überlegung können wir hier einzelne Punkte gänzlich abwählen.

Eine für mich unnötige Warnung ist “Return Value Discarded“. Diese Warnung wird ausgelöst wenn eine Funktion einen Wert zurückgibt, man diesen aber nicht abgreift. Deswegen hab ich bei mir diesen Haken weggenommen.

Bei der Warnung „Return Value Discarded“ fällt mir auf Anhieb gar keine Möglichkeit ein, das Skript warnungsfrei zu erstellen. Denn würde ich das Return-Ergebnis in eine Variable speichern, käme je ein anderer Warnhinweis, welcher besagt, dass die Variable im weiteren Skript nicht verwendet wird.

Für ein Skript Warnungen unterbinden

Ein ebenso rigeroser Eingriff ist die Verwendung folgender Skriptzeile am Anfang des Skriptes:

#warnings-disable

Aber Vorsicht, es macht was da steht, es werden jeglichen Warnungen in dem Skript unterbunden!

Warnungen verhindern

Im Gegensatz zu „Return Value Discarded“ kann eine andere Warnung durch einen einfachen Eingriff verhindert werden. Die Warnung „unused argument“ wird beispielsweise ausgelöst, wenn eine Funktion ein Argument liefert welche nicht in dieser Verwendung findet.

func _process(delta):
	pass

liefert beispielsweise delta. Benötige ich dies Argument in meiner Funktion nicht, gibt es eine Warnung. Einfach rauslöschen aus dem Funktionskopf funktioniert jedoch auch nicht. Dies führt sogar zu einem Fehler!

Die Lösung das Argument LOKAL machen, hierfür ändern wir lediglich den Funktionskopf ab und fügen dem Argumentnamen einen Unterstrich am Anfang hinzu.

func _process(_delta):
	pass

Fehler finden

Während Syntaxfehler relativ leicht zu finden sind, meist gibt die Fehlermeldung ausreichend Auskunft, sind Logik-Fehler hingegen schwer zu finden. Schließlich ist man ja von seinem Vorgehen überzeugt.

pirnt()

Die einfachste Methode seinen eigenen Gedankenfehlern auf die Spur zu kommen, ist die print() Funktion. So wie ein Skript nicht das liefert, was ich von ihm erwarte, lasse ich mir an entsprechenden Stellen im Skript Variableninhalte mit print() anzeigen. Auch ist es ein Mittel zum Zweck um zu überprüfen ob ein Skriptblock überhaupt aufgerufen wird. Die mit print ausgegebenen Inhalte können wir bereits zur Laufzeit im Ausgabefenster mitverfolgen.

Der Debugger

Noch effektiver wird es mit dem Debugger. Wenn beispielsweise ein Skriptblock viele Male pro Sekunde aufgerufen wird, verliert man schnell den Überblick. Mit dem Debugger können wir innerhalb des Skriptes eine Zeile bestimmen an welcher das gesamte Programm in den Dornröschenschlaf verfällt. Hierzu klicken wir in der entsprechenden Zeile links neben der Zeilennummer, wodurch dort ein roter Punkt angezeigt wird. Der Breakpoint.

Starten wir jetzt das Programm, wird es am Breakpoint wieder Pausiert. Zu diesem Zeitpunkt schauen wir uns einmal das Debugger Fenster genauer an.

Debugger ⇒ Reiter(Debugger)

Auf der rechten Seite können wir in der Auflistung alle Variablen und dessen Werte sehen. Selbst bei Arrays können wir mit einem Klick auf eines, dessen Inhalt betrachten. Mit dem Button (Fortfahren) verlässt das Programm wieder den Pause Modus bis es erneut am Breakpoint unterbrochen wird.

Dieses Bild zeigt die beiden Buttons Pause und Fortfahren oben rechts im Debuggerfenster.

Die Auflistung der Variablen und dessen Werte wird entsprechend aktualisiert. Diese Aktualisierung findet nur bei einem Breakpoint statt. Dies ist zum Verständnis der folgenden Vorgehensweise wichtig.

Der Breakpoint kann auch in den Pausen im Skriptfenster gesetzt oder weggenommen werden. Wir können hierzu den Button(Pause) drücken einen Breakpoint setzen, die Pause wieder mit dem Button(Pause) beenden und beim nächsten Erreichen des Breakpoints, die Variablenwerte einsehen. Dies ist gerade bei Fehlern, welche erst nach einiger Zeit auftreten sinnvoll. Wir können auch mehrere Breakpoints setzen.

windy – 10.09.2019

godot/projekt/debugger.txt · Zuletzt geändert: 2020/10/11 22:48 (Externe Bearbeitung)