War3err
war3err ist eine Art integrierter Debugger für Warcraft 3 und Bestandteil der Jass NewGen Pack-Werkzeuge bzw. des Hack-Programms Grimoire. Das Programm kann nur bis zu Version 1.21b Warcraft 3's verwendet werden.
Inhaltsverzeichnis |
Verwendung
Um das Programm benutzen zu können, muss man es per Menüeintrag im Editor aktivieren.
Daraufhin sind können zur Spielzeit mittels der Anweisungcall Cheat("war3err_DumpGlobalHT")alle globalen Variablen und deren Werte in die Datei logs/war3err.txt geschrieben werden. Dasselbe gilt für lokale Variabelen mittels
call Cheat("war3err_DumpLocalHT"). Dabei werden dann alle lokalen Variablen des aktuellen Bezugsrahmens hineingeschrieben. Außerdem kann mittels
call Cheat("DebugMsg: msg")die Nachricht msg in die Datei logs/war3erruser.txt geschrieben.
Fehlerausgabe
Auf folgende Fehler wird während des Spiels automatisch per Nachricht hingewiesen:
- Operationsbeschränkung: Bei einem Aufruf von 300 000 Bytecode-Operationen.
- 0-Teilung: Bei einer Teilung eines Integers oder Reals durch 0.
- Falsche Variablenverwendung: Bei einer Auslesung von uninitialisierten Variablen.
- Falsche Verwendung von Jass:ExecuteFunc: Falls die ausgeführte Funktion nicht existiert oder Parameter hat, wird ein Absturz verhindert.
- Falsche Verwendung von [[Jass::Player]]: Falls der Parameter number größer als 15 oder kleiner als 0 ist.
Bytecode Tracer
Um den Bytecode Tracer verwenden zu können, muss in der Datei war3err.lua der Eintrag "bytecodetrace = true" stehen. Daraufhin werden sämtliche aufgezeichnete Operationen in die Datei logs/bytecodelog.txt geschrieben. Der Bytecode Tracer zeichnet praktisch alle Jass-Operationen auf. Dazu gehören zum Beispiel Funktionsaufrufe oder arithmetische Operationen.
Mit den Anweisungencall Cheat("PauseTracer")und
call Cheat("ContinueTracer")kann die Bytecode-Aufzeichnung angehaltet bzw. fortgesetzt werden.
Speicherschutz
war3err weist auf falsche Dellokationen von Speicher, wie zum Beispielcall DestroyGroup(null), hin. Außerdem werden Speicherlecks ermittelt, welche mittels
call RemoveLocation(I2Loc(-1)) und call DestroyGroup(I2Grp(-1)) extrahiert werden können.
Profiling
Um diese Eigenschaft des Programms nutzen zu können, muss in der Datei war3err.lua der Eintrag "profiling = true" stehen. Außerdem muss man eine leere Funktion namens LogJASSCalls und eine Variable namens LogVariableUse im Code hinzufügen. Daraufhin kann man mittels der Anweisungcall LogJASSCalls() die Aufrufhäufigkeit bzw. Statistiken aller Funktionen sehen. Setzt oder liest man dagegen die Variable LogVariableUse aus, so sieht man die Statistiken bezüglich der Verwendung aller Variablen.
Keine Pause
Enthält die Datei war3err.lua den Eintrag "nopause = true", so wird das Spiel bei einer Defokusierung des Warcraft-Fensters nicht pausiert. Dies funktioniert allerdings nicht bei Wiederholungen.

russische Team, stehen wir nun im Halbfinale vor einem weiteren Giganten der e-Sports-Szene:
Finnland! Die Skandinavier hatten es im Gegensatz zu unserem