Inhaltsverzeichnis

Effektives Debugging

Wie schon in Fehler finden und beheben angesprochen wurde, sind Skripte nach dem Erstellen meist nicht fehlerfrei. In Häufige Fehler werden häufige Stolpersteine angesprochen, sobald aber Skripte und damit auch die möglichen Fehler komplexer werden, wird das Debugging schwerer. Daher sollen auf dieser Seite Strategien vorgestellt werden, mit denen auch kompliziertere Bugs gefunden werden können.

Arten von Fehlern

Üblicherweise unterscheidet man drei Arten von Fehlern:

Da syntaktische Fehler von dem Debugger mit Zeilenangabe gefunden werden, werden diese im Folgenden nicht beachtet werden.

Strategien

Die hier vorgestellten Strategien sind nach Aufwand und Verzweiflungslevel geordnet, daher ist es empfohlen, mit die Methoden in der vorgestellten Reihenfolge abzuarbeiten.

Strategie 1: Alles mit Messages zukleistern

Um Fehler zu finden, ist es hilfreich, zu verstehen, welche Variable zu welchem Zeitpunkt welchen Wert besitzt. Die einfachste Methode, den Inhalt von Variablen zu einem gewissen Zeitpunkt auszulesen, ist es, den Wert mittels

 Message 

oder

 LuaDebugger.Log 

auszugeben. Hierbei ist es sinnvoll, zwei Regeln zu folgen:

  1. Jede Ausgabe sollte mit einem kleinen Text versehen werden, um später die Ausgabe auch der richtigen Variable und dem richtigen Zeitpunkt zuordnen zu können.
  2. Es sollten genug Werte ausgegeben werden, um nachvollziehen zu können, was im Code passiert, aber nicht so viele, dass die Ausgabe unlesbar wird.

TODO: Beispiel bringen?

Strategie 2: Breakpoints setzen

Falls die erste Strategie nicht ausreichend ist, um zu verstehen, was im Code nicht so abläuft wie erwartet, wäre es schön, den Code einfach anhalten zu können. Glücklicherweise ist genau das mit Breakpoints möglich! Wird mit aktivem LuaDebugger die Funktion

 LuaDebugger.Break 

ausgeführt, so wird Siedler pausiert und es ist möglich, mithilfe des Debuggers den Wert der im aktuellen Scope verfügbaren Variablen ausgeben zu lassen. Außerdem ist es möglich, mithilfe des LuaDebuggers das Programm danach Schritt für Schritt ausführen zu lassen. Während der Breakpoint ausgelöst ist, verändert sich die Oberfläche des LuaDebuggers etwas:

Achtung: Werden im Multiplayer Breakpoints gesetzt, so wird, während die Pause aktiv ist, auch die Kommunikation mit dem Server pausiert. Daher ist es möglich, dass der Server, da dieser keine Pakete vom Client erhält, die Verbindung trennt.

TODO: Beispiel?

Strategie 3: Auskommentieren

Strategie 4: "Rubberducking"

Strategie 4: Neu schreiben