da ich zu diesem Thema mehr Fragen als Antworten fand, hab ich mich mal hingesetzt und ne Anleitung dazu zu geschreiben.
Allgemeines
Der Debugger ist Bestandteil des Script Editors und ist "nur" Objektbezogen. Das heisst es werden alle Scriptbefehle eines Objektes mitgeloggt. (Hinweis: Will man z.b. nur das Flugscript untersuchen, sollte man die Turretscripte/Kommandos abschalten) Scripte, die auf keinem Ojekt(null) laufen, werden als Globale Scripte bezeichnet. Abhängig davon , auf welchem Objekt (zB einem Schiff) das Script läuft, das man debuggen will, muss man den Script Editor unterschiedlich aufrufen (Aktivierung mit "Thereshallbewings" vorrausgesetzt):
für Objektbezogene Scripte:
bestimmtes Schiffsmenu -> Kommando Konsole (des Schiffs) -> Script Editor
für Globale Scripte:
Main Menü -> Kommando Konsole -> Script Editor
Nun steht unter dem Menüpunkt "Script Debugging:XXX" bei XXX der Name des Objekts, das man debuggen will.
Menupunkte des Debuggers
Der Debugger besteht aus vier Menupunkten.
"Script Debugging:XXX"-Einstellung (XXX entweder "GLOBAL" oder ein Schiffsname),
"Clear Debug Messages" löscht alle Debugging Logs des aktuellen Objekts
"Script Debugger Menu". der eigentliche Debugger (Anzeige der Logs)
sei patch 1.3 neu:
"Global Script Tasks". hiermit kann man laufende globale Scripte beenden (Achtung! - Skripte die auf Stationen laufen können zur Zeit nicht abgebrochen werden!)
Einstellung des Debuggers
Diese Einstellung sollte man festlegen, bevor man das Script startet, das man debuggen will (ich hab mir schon mal bei laufendem Script und "Script Debugging:XXX" Wechsel mein Spiel zerschossen
unter dem Menupunkt :"Script Debugging:XXX" gibt es drei Einstellmöglichkeiten.
1) LOG
2) TRACE
3) OFF - deaktiviert den Debugger
---------------------------------
1) LOG:
Bei "LOG" werden alle Commandos, die im Script aufgerufen werden(sprich jede Zeile die auch wirklich ausgeführt wird) im "Script Debugger Menu" aufgelistet(also mitgeloggt). Das Loggen erfolgt so schnell wie die Befehle im Script von eurem Rechner abgearbeitet werden. Wenn also irgendwo im script zB ein " @ = wait 1000 ms" steht, hält der Loggingvorgang auch 1000 ms an. Rumscrollen geht mittels "Bild hoch/runter". Neue Logs werden einfach unten angehängt, solange man nicht mit "Clear Debug Messages" die Logs löscht(ein Menü höher).
die Logging Einträge haben diese Form (Beispiel):
Code: Select all
-----------Scriptname:Line:Stackdepth:Prio:PID:TaskID:Command--------
!trade.buywarebest.pl:22:0:0:164918987:$amount= This -> ....
!trade.buywarebest.pl:23:0:0:164918987: ...undweiterimcode....
!trade.buywarebest.pl:24:0:0:164918987: ...undweiterimcode....
...
Scriptname : Name des Scripts, was gerade ausführt wird (bei Namenswechsel muss ein ScriptCall stattgefunden haben)
Line : Zeile des Befehls im Script (!ACHTUNG in X2 v1.2 weicht diese Zeilennummerierung von der im Script ab, da hier nur die "ausgeführten Zeilen" durchnummeriert wurden - war vermutlich nicht so gewollt)
Stackdepth : Anzahl der Scripte auf dem Stack des Objekts(jedes Objekt hat seinen eigenen Stack)
Prio : Priorität des Scripts
PID :
TaskID :
Command : Der ausgeführte Befehl im Script
2) TRACE:
Der unterschied zu LOG ist klein aber fein. Im Trace-Modus loggt der Debugger auch wie LOG alle ausgeführten Befehlszeilen im schon oben erklährten Format mit. Nur findet hier das Logging nicht automatisch statt, sondern man muss mit "ENTER" einen "Step" (Schritt)im Code machen. Das Script steht also zu Beginn still und man muss sich mit <ENTER> quasi Schritt für Schritt durch seinen Code "steppen" und nach Fehlern suchen. Die nächste auszuführende Zeile wird zudem noch grün hervorgehoben. Zusätzlich werden im Trace-Modus auch noch die deklarierten Variablen des aktuell laufenden Scripts und deren Inhalt angezeigt. So kann man zB schnell fehlerhafte Belegungen von Variablen finden.
wenn "Script Debugging:XXX" auf TRACE gestellt ist schauts ungefähr so aus:
Code: Select all
-----------Scriptname:Line:Stackdepth:Prio:PID:TaskID:Command----------
!trade.buywarebest.pl:22:0:0:164918987:$amount= This -> ....
!trade.buywarebest.pl:23:0:0:164918987: ...undweiterimcode....
!trade.buywarebest.pl:24:0:0:164918987: ...undweiterimcode....
...
[b]VariableName: Datatype, Value (interger value) [/b]
$amount: DATATYP_NULL,null,(0) <---------- hier stehen deklarierte Variablen und deren Inhalt
...nochmehrvariablen....
...
Objektbezogene Scripte können entweder in die Command Console Menüs eingebunden und somit per Schiffbefehl gestartet werden, oder man startet ein Script mit "r" in der Scriptliste des Script Editors. Beim Starten mit "r" wird sofort nach einem Referenz Objekt, gefragt (Station oder Schiff), also dem Objekt, auf dem das Script nun laufen soll. Wählt man hier "null" , läuft das Script auf keinem Objekt, und wird als "Globales Script" bezeichnet.
Ob ein Script wirklich läuft, kann man sehen, indem man den Namen seines Scripts in der "Script Task Statistik" sucht. Die "Script Task Statistik" findet man auch im Scripteditor - mit der "Bild runter Taste" (also wenn ein Script gestartet wurde, einfach mit ESC ein Menü zurück und dann "Bild runter")
Hat man vor dem Start seines Scripts den Debubber eingeschaltet, werden alle ausgeführten Scriptbefehle des Objekts im "Script Debugger Menu" mitgeloggt.
Beenden kann man Objektgebundene Scripte durch Zuweisen eines neuen Befehls in der "Kommando Console" des Objekts(Schiffs). Skripte die auf Stationen laufen können zur Zeit nicht abgebrochen werden!
Global laufende Scripte kann man mit dem (seit patch 1.3) neuen "Global Script Tasks" Menüpunkt im Script Editor beenden. Einfach das zu beendende Script in der Liste raussuchen und mit <DEL> entfernen.
Damit müssten eigentlich die gröbsten Unklarheiten bezgl. des Script Debuggers beseitigt sein. Sicherlich lassen sich damit viele Programmierfehler aufspüren
Ich hoffe es hilft jemandem weiter...
Vanoblis