[HOWTO] Quest Debugging

05/05/2014 23:43 Mastermonkey#1
Heyho ;)

heute möchte ich ein Teil meines Wissens mit euch teilen und euch
ein paar Tipps und Tricks verraten, wie ihr eure Quests ganz einfach debuggen könnt.

Eines Vorab, das hier soll kein weiterer Questhilfethread werden,
sondern lediglich Informationen liefern, wie ihr euch selber,
aber einfacher die Lösungen erarbeiten könnt!

Wikipedia Debugger:
  1. DONT make WITH make!!
  2. syserr's live auslesen
  3. syserrs von Quests mit Zeilenangabe ansehen
  4. Ingame Dump-Funktion für Tabellen



1.) DONT make WITH make!!
Bei einer Umfrage habe ich von 90% der Leute gehört, dass sie beim programmieren jedesmal mit
PHP Code:
make 
python make
.py
sh make
.sh 
oder Vergleichbarem ihre Quests kompilieren.

Kurzer Exkurs (Funktionsweise make):

Wenn ich also eine Quest bearbeite, dann kann ich es mir schenken alle anderen Quests (die funktionieren (sollten :D)) auch nochmal zu kompilieren!
An denen hat sich normalerweise nichts geändert.

Wie kompiliere ich nun meine quest?
Ich wechsel in den quest Ordner
PHP Code:
cd /root/quest 
Falls ihr diesen Symlink nicht habt, legt ihn am besten gleich an!
PHP Code:
ln -s /PFAD/ZU/MEINEN/FILES/share/locale/germany/quest /root/quest 
und kompiliere meine Quest so
PHP Code:
./qc Ordnername/Questname.quest 
Fazit:
Ich spare Zeit!!
Die Ausgabe ist übersichtlich(er).

2.) syserr's live auslesen
Erschreckenderweise ist meine Umfrage hier ähnlich schlecht verlaufen.
(Ja, ok ich habe nur 9 andere gefragt und mich selbst hinzugezählt :D)
Also 70% laden die syserr Datei jedesmal umständlich mit Filezilla oder ähnlichen FTP-Programmen runter.
10% wussten nichtmal das es eine syserr gibt, schönen Gruß an BlaueShorts!

Mit ein paar Schritten zum live-Debugging:
PHP Code:
MYPATH="/PFAD/ZU/MEINEN/FILES"; #Hier den PFAD ersetzen, danach nichtmehr 
#Pfad anlegen
mkdir -p $MYPATH/share/logs ;
#Fakesyserr anlegen (sonst macht ihr eure Shell kaputt)
touch $MYPATH/share/logs/syserr ;
#alias anlegen
echo -e "\nalias syserr tail -f $MYPATH/*/*/syserr" >>/root/.cshrc ;
#In eine neue Shell wechseln, damit der alias funktioniert
su ; 
Nun habt ihr das live-Debugging vorbereitet und könnt es testen wenn euere Cores laufen.
Dazu gebt ihr einfach folgendes in eure Konsole ein:
PHP Code:
syserr 
(Abbrechen mit "Strg" + "c")

Fazit:
Mit der Liveansicht sehe ich direkt wenn ich Ingame was anklicke, ob es einen Fehler erzeugt!
Wenn dort durchgehend neue Zeilen kommen, habt ihr nicht nur einen Fehler ;)


3.) syserrs von Quests mit Zeilenangabe ansehen
Ich habe zum Verständnis mal einen solchen Fehler reproduziert:
PHP Code:
SYSERR: May  5 20:32:07 :: RunState: LUA_ERROR: locale/germany/quest/object/state/dumper:23: bad argument #1 to `foreach' (table expected, got string) 
Da viele ihren Quests nach belieben die Namen geben, wissen sie nicht direkt um welche quest es sich handelt.
Viele denken auch, dass sie in ihrer ausgedachte.quest Datei den Fehler an Zeile 23 finden würden.

Dem ist natürlich nicht so. Der Fehler ist in der kompilierten Datei an Zeile 23, das kann in eurem Original aber auch Zeile 30 sein.
Damit ihr leicht rausfindet was in dieser Zeile steht, können wir uns wieder ein Werkzeug zur Hilfe nehmen:
Das quest_debug.sh!

Einbau in wenigen Schritten:
PHP Code:
#Wir brauchen "bash" und den symlink (Standardkonfiguration ist passend)
cd /usr/ports/shells/bash && make install clean
ln 
-s /usr/local/bin/bash /bin/bash

#Ordner erstellen
mkdir /root/tools ;
#TODO: Ladet das quest_debug.sh in diesen Ordner -> /root/tools
#Rechte vergeben
chmod +x /root/tools/quest_debug.sh ;
#Alias anlegen
echo -e "\nalias qd /root/tools/quest_debug.sh" >>/root/.cshrc ;
#Symlink zu euren Files anlegen
ln -s /PFAD/ZU/MEINEN/FILES /root/mt2;
su ; #Ihr wisst wofür.. 

Wie benutze ich dieses Werkzeug nun?

Eine kurze Anleitung steht dort wenn ihr
PHP Code:
qd 
eingebt.
Auf unser Beispiel bezogen sieht der Aufruf so aus:

Fazit:
Man spart Zeit, da man sich nicht erst die entsprechende Datei per Filezilla runterladen muss und dann noch die passende Zeile suchen...


4.) Ingame Dump-Funktion für Tabellen

Ich selber habe bei komplizierten Tabellen oftmals ein Problem, dass ich nicht weiß,
an welcher Stelle sich jetzt das von mir gesuchte Objekt befindet und da ich Ratespielchen nicht mag,
habe ich ein weiteres Werkzeug speziell hierfür gebaut:
Dumper.quest

Vorbereitung:
In die quest_functions eintragen:

Die Quest Dumper.quest in den Questordner und in der locale_list eintragen und kompilieren.
PHP Code:
cd /root/quest/;
./
qc Dumper.quest
echo "Dumper.quest" >>locale_list 
man man man, das solltet ihr aufjedenfall beherrschen...

Beispielquest zum Test der Funktion:
Meine Frage an euch: Welche Farbe hat mein Auto? :)

Fazit:
Ich sehe auf einen Blick welche Punkte sich in meiner Tabelle befinden.
Das beste: Ich weiß auch direkt wie ich sie Aufrufen kann :)


Abschlussworte:
Ich hoffe ich konnte euch ein paar interessante Infos mitteilen,
oder euch zumindest ein wenig erheitern ;)

Sollten noch Fragen offen sein, beantworte ich diese gerne.
Ich habe natürlich noch viel mehr solcher nützlichen Tools,
also bin ich auf euer Feedback gespannt wie es so ankommt.
05/05/2014 23:44 .PsychoMantis™#2
Da hat sich der kleine Flo im Affenkostüm wieder mal selbst übertroffen :D
05/05/2014 23:52 .Colossus.#3
Auf den ersten Blick super.
Werds morgen mal ausprobieren ;)
05/06/2014 00:37 dstyl#4
Sieht sehr gut aus, nur bei dem Live-Debugging komm ich i-wie net klar was du jetzt genau meinst was man machen soll. :D
Ansonsten, alles durchgelesen und : WOW..
Hätte echt net gedacht das manches so "einfach" sein könnte..
Bspw. das mit dem ./qc PFAD/questname.quest , vielen Dank dafür. :)
Und ein Danke an BlaueShorts für den Lachflash am "frühen Morgen". :D
05/06/2014 19:24 SintoProduction#5
Sehr Nice :)
11/23/2014 16:41 Mastermonkey#6
Wer hätte es gedacht, dass ich aufgrund eines mangelnden Backups selbst nochmal diesen Post zu lieben lerne.
Manchmal hat es auch einen Nutzen wenn man was bei epvp public macht und wenn es "nur" als Backup ist :D
11/25/2014 12:13 Lefloyd#7
Heyo,
gute Hinweise, helfen bestimmt einigen, allerdings muss man zu ein paar Punkten was dazu sagen; z.B. das Kompilieren von einzelnen Quests finde ich recht unnötig, da es bei mir schneller geht nur zu schreiben "sh quest.sh" (und - ich weiß nicht ob das bei manchen anders is, aber ist bei mir so - es dauert ca. 0.5 - 1 sekunde)^^ Kann man natürlich machen, aber sofern man die Quest unten in die locale_list einträgt wird ja sowieso diese Quest als letztes angezeigt :p
Und dazu, dass man in der sys_err erst "die passende Zeile finden muss" muss ich sagen: ich empfehle erstmal alle Fehler aus der sys_err zu beheben, dann gibts auch nix zum Suchen :D Natürlich hast du Recht, einige haben diese Fehler und sind zu Faul alles rauszusuchen wie sie es beheben können, nur vom Grundsatz her sollte es diese Fehler eigtl. gar nicht geben^^ Anyways, praktisch für einige, die öfter mal Fehler bei Quests haben & bisher nicht wussten, wie sie sie beheben können :)

Kind Regards