Der ScriptDebugger - Anleitung (v1.3 UPDATED)

Hier ist der ideale Ort um über Scripts und Mods für X²: Die Bedrohung zu diskutieren.

Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators

Post Reply
Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Der ScriptDebugger - Anleitung (v1.3 UPDATED)

Post by Vanoblis » Sat, 6. Mar 04, 17:26

Hallo zusammen,

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....
...
in einer Zeile sind mehrer Informationen durch "Doppelpunkt" getrennt.

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....
...
Starten, Stoppen und Debugging von Scripten
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
Last edited by Vanoblis on Sun, 14. Mar 04, 19:54, edited 9 times in total.
Van

This sentence is not provable - Gödel

ComMcNeil
Posts: 1430
Joined: Thu, 11. Sep 03, 19:14
x3tc

Post by ComMcNeil » Sat, 6. Mar 04, 17:41

also hab folgendes prob:

ich stell beim debugging trace ein, dannach geh ich in den scripteditor und starte mein script mir r, null als wert und es startet, gut jetz is das script aber durchgelaufen und im script debugger menu steht nix, auch wenn ich vorher das ganze auf log gestellt habe tut sich auch nix...mach ich was falsch oder funkts einfach nicht

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Sat, 6. Mar 04, 18:32

hmmm, klingt irgendwie schon komisch,
aba woher weisst du, dass dein script durchgelaufen ist?

ich vermutete zwei mögliche ursachen:
1) hast du ein savegame geladen, das du mit aufgerufenem scripteditor gespeichert hast!? - das hat bei mir mal ziehmliches chaos im scripte cache verursacht. und vielleicht auch dafür verantwortlich -> probiers mit nem frischen savegame

2)trifft vielleicht nicht ganz zu denn du müsstest zumindest etwas im debugger menu sehen. wirklich gar nix? - oda steht nur überall null, null
es ist etwas dof scripte zu debuggen, bei denen konstanten wie [THIS] oft vorkommt, weil wenn das script vom einem selber mit "r" im editor ausgeführt wird, gibts es ja kein [THIS] . leider kenn ich keine möglichkeit diese konstanten mit irgendetwas zu belegen. (oda gibts doch eine?) hier müsste man neue variablen einführen und die man am anfang mit [THIS] initailisert und fürs debuggen dann zB das ship als argument ans script übergeben. aba dazu lass ich mir noch was einfallen...
....
schick mir doch dein script per PM oda stells hier rein - ich guck ma rein obs bei mir auch so is... ;)

van
Van

This sentence is not provable - Gödel

X2soUrcerer
Posts: 28
Joined: Mon, 16. Feb 04, 04:11
x2

Post by X2soUrcerer » Sat, 6. Mar 04, 18:47

tolle infos!

IMHO gehört das gepinnt.


grüsse

ComMcNeil
Posts: 1430
Joined: Thu, 11. Sep 03, 19:14
x3tc

Post by ComMcNeil » Sat, 6. Mar 04, 21:23

ich werds dir nachträglich noch per pm schicken, es is ein script das alle argonischen SKWs in den sektoren 0/0 bis 10/10 löschen soll, das problem is er machts nur in der ersten spalte (dh 0/0 - 0/10), wollt also schauen worans liegt (mit trace) geht aber nicht

und ich bin mir wegen 2 dingen sicher das es durchgelaufen is:

1. im scripteditor steht bei times called nicht 0

und 2. die SKWs sind in der ersten spalte wie gesagt WEG

pm folgt

mfg

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Sun, 7. Mar 04, 04:21

sodala,

also bei mir ging das debuggen deines scripts ohne probleme
details zu den fehlern:
http://www.egosoft.com/x2/forum/viewtop ... 806#347806

nochmal die frage:
haste wirklich einen sauberen speicherstand geladen???, also musst du wenn du geladen hast erst noch "Thereschallbewings" eintippen, oder nicht mehr?

starte mal ein neuesgame, speicher sofort wenn du ins weltall kommst. und benützte dieses savegame um zu scripten.

sonsten is vielleicht was mit deinem spiel imma ganz richtig? neuinstall hilft vielleicht?
viel erfolg....
Van

This sentence is not provable - Gödel

ComMcNeil
Posts: 1430
Joined: Thu, 11. Sep 03, 19:14
x3tc

Post by ComMcNeil » Sun, 7. Mar 04, 09:39

thx für deine hilfe ich werds ausprobieren


EDIT:

hm...sehr komisch is das immer wen ich ein eneus game machne will sich mein X irgendwie aufhängt...es bleibt der letzte ladescreen, ich kann aber in menüs usw reingehn...bringt aber nix

lösung 1. ich installiers neu (was ich aber jetz nciht will :D)
2. irgendwer macht nen ganz neues save game und is so nett uns schickts mir weil laden geht ohne probs :roll:


EDIT2: hab jetz ein neues cleanes save bekommen, geht trotzdem nicht, ich glaub ich muss mal x2 neu installn...aber nicht jetz :D

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Mon, 8. Mar 04, 20:39

Hallo zusammen,

ich bin mittlerweile dahintergestiegen wie man scripte debugged, die von einem schiff ausgeführt werden. werds auch noch oben in die Anleitung reineditieren.

Also:

Was man debugged, hängt davon ab, über welchen menüs man in den scripteditor gelangt.
der menupunkt "Script Debugging:GLOBAL" hieß bei mir immer GLOBAL, weil ich in meinen scripteditor immer per "Enter","e","s" gegangen bin.
geht man aba über die commandoconsole eines bestimmten schiffes in dem scripteditor steht da nicht mehr
"Script Debugging:GLOBAL"
sondern
"Script Debugging:SCHIFFSNAME"

und somit kann man die scripte die von diesem schiff ausgeführt werden, tracen oder loggen ^^.

endlich alles verstanden... :D
Van

This sentence is not provable - Gödel

ComMcNeil
Posts: 1430
Joined: Thu, 11. Sep 03, 19:14
x3tc

Post by ComMcNeil » Mon, 8. Mar 04, 21:19

DANKE genau DAS wars :D

du hast mich davor bewahrt X² neu installn zu müssn

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Mon, 8. Mar 04, 21:29

na zum glück hab ichs noch rausgefunden, bevor du neuinstalliert hast^^
n reinstall hätt wohl nix gebracht... hehe ;)
Van

This sentence is not provable - Gödel

ComMcNeil
Posts: 1430
Joined: Thu, 11. Sep 03, 19:14
x3tc

Post by ComMcNeil » Mon, 8. Mar 04, 22:11

Vanoblis wrote:na zum glück hab ichs noch rausgefunden, bevor du neuinstalliert hast^^
n reinstall hätt wohl nix gebracht... hehe ;)
fragt sich nur ob so eine trennung des debuggers sinnvoll is...

TBlues
Posts: 18
Joined: Mon, 8. Mar 04, 00:09
x3tc

Post by TBlues » Wed, 10. Mar 04, 23:55

eine frage die sich mir seid geraumer zeit aufdrängt wie beendet mann die ausführung eines skripts? habe da ein nettes skript was automatisch kohle zwischen meinen fabs und der grossen kasse hin- und herschiebt, leider spammt es dabei den nachritenlog zu und es gibt momente wo ich es gerne abschalten würde...

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Thu, 11. Mar 04, 01:12

TBlues wrote:eine frage die sich mir seid geraumer zeit aufdrängt wie beendet mann die ausführung eines skripts? habe da ein nettes skript was automatisch kohle zwischen meinen fabs und der grossen kasse hin- und herschiebt, leider spammt es dabei den nachritenlog zu und es gibt momente wo ich es gerne abschalten würde...
wenn das ein globales script ist(mit ner endlosschleife), was du mit "r" im scripteditor gestartet hast, haste leider n problem. solche scripte lassen sich zur zeit nicht beenden. da müsstest du schon die schleife bedingt irgendwann abbrechen lassen, sonst kann man nur schiffsscripte beenden.
aus der docu:

(!) Warning (!)
Do not run scripts that are supposed to run continously on “null”.
As of yet there is no way to stop a running script that is not object
bound.
A buggy script can cause serious, unwanted sideeffects
such as savegame corruption and game crashes!
Van

This sentence is not provable - Gödel

BalaGi
Posts: 42
Joined: Wed, 6. Nov 02, 20:31
x2

Re: Der ScriptDebugger - Anleitung

Post by BalaGi » Thu, 11. Mar 04, 12:08

Hallo,
Vanoblis wrote:Hallo zusammen,

da ich zu diesem Thema mehr Fragen als Antworten fand, hab ich mich mal hingesetzt und ne Anleitung dazu zu geschreiben.

Der Debugger besteht aus drei Menupunkten.
"Script Debugging:XXX"-Einstellung (XXX entweder "GLOBAL" oder ein Schiffsname),
"Clear Debug Messages" löscht alle Debugging Logs
"Script Debugger Menu". der eigentliche Debugger (Anzeige der Logs)

...
noch ein kleiner Hinweis:
der Debugger ist "nur" Objektbezogen, heißt, er traced z.b. alle Scripte die auf einem Objekt (Schiff) laufen. Wer alle z.b. nur das Flugscript untersuchen will, sollte die Turretskripte/Kommandos abschalten ;)

Hoffe, der Debugger ist nützlich ;) Zwar nicht besonders komfortabel, aber etliche Programmierfehler sollten sich damit schon aufspüren lassen ;)

-Bala Gi
[ external image ]
WirWissenNicht, WieDasParadiesAussieht. AberVermutl.IstEsBlaumagentaMitRosafarb. Sprenkeln.
DochWirSolltenSelbstDannDasBesteDarausMachen, WennEsNichtSoIst, Sond.GrünrotGequadert

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Sun, 14. Mar 04, 16:31

erst mal geht ein dickes DANKE an BalaGi *verneig*

mit dessen postings ich meine letzten Unklahrheiten bzgl. des Debuggers beseitigen konnte *freu*

ich habe die Debugger Anleitung nun endlich überarbeitet und erweitert. (is auch optisch etwas ansprechender geworden) Vielleicht werden damit einge Sachverhalte klarer. Für Verbesserungsvorschläge und konstruktive Kritik bin ich natürlich offen.

viel spass damit
van
Van

This sentence is not provable - Gödel

XFiles
Posts: 196
Joined: Fri, 6. Feb 04, 08:07
x4

Post by XFiles » Tue, 16. Mar 04, 11:57

supi Tausend Dank.

@admins

Der Thread verdient ein "Wichtig" !
Wer die Wahrheit nicht weiß, der ist bloß ein Dummkopf. Aber wer
sie weiß und sie eine Lüge nennt, der ist ein Verbrecher

Bertold Brecht

Vanoblis
Posts: 61
Joined: Wed, 25. Feb 04, 03:28
x2

Post by Vanoblis » Tue, 16. Mar 04, 14:33

thx a lot :D

ich würd mich auch freuen , wenn die mods dieshier pinnen könnten. va solange BurnIt! nicht weiter zeit und lust findet an der docu weiterzuschreiben, wos dann ja auch beschrieben sein wird. nur is die docu leider noch nicht so weit.
für leute die neu einsteigen und wärs ne nette hilfe (glaube ich)..

ps. wenn ma schon beim thema pinnen sind ;) der Thread von MrMilti mit den IDs sollte auch einen kriegen:
http://www.egosoft.com/x2/forum/viewtopic.php?t=33680

also bitte liebe mods:
pinnen

danke
van
Van

This sentence is not provable - Gödel

David27
Posts: 4
Joined: Mon, 23. Aug 04, 01:08
x2

Post by David27 » Wed, 1. Sep 04, 19:41

Vanobilis hat zum Starten des Scripteditor geschrieben:

für Objektbezogene Scripte:
bestimmtes Schiffsmenu -> Kommando Konsole (des Schiffs) -> Script Editor
für Globale Scripte:
Main Menü -> Kommando Konsole -> Script Editor

Wie komme ich denn vom Main Menü in die Kommandokonsole ?

Unter Main Menü verstehe ich das Menü nach dem Starten des Spiels ( Neues Spiel, Spielstand laden,Video,Mitarbeiter etc.)
Ist das das falsche Mainmenü ?
Vielen Dank für eure Antworten.

Post Reply

Return to “X²: Die Bedrohung - Scripts und Modding”