Debuggen mit dtell()


Hallo,

die Funktion dtell() ist für das Debuggen von Code gedacht. Sie ist in der secure/simul_efun.c definiert.

Syntax: dtell(mixed wem,mixed was,string idt);

wem
Magiername oder Array mit mehreren Magiernamen
was
Array, String, Mapping etc.
idt
Optionaler String, der jeder Zeile vorangestellt ist

Mit dtell() kann man sich eigene Texte oder die Inhalte von Variablen anzeigen lassen. dtell() ist AnderLand spezifisch, in anderen MUDs mag es andere Lösungen geben.

Vorteile von dtell(): Mit dtell() kann es nicht passieren, dass der Code buggt, wenn der debuggende Magier nicht anwesend ist. Vor dtell() wurden oft solche Konstrukte benutzt:

  • tell_object(find_player(“magiername”),”Meine Debugmeldug.\n”);
    Buggt, wenn der Magier ‘magiername’ nicht im AnderLand ist. Die Abfrage nach der Anwesenheit des Magiers wird gerne mal unterschlagen (z.B. aus Faulheit).

  • DD(x) tell_object(find_player(“magiername”)||this_object(), x)
    Hat den Nachteil, dass man das irgendwo definieren muss. Hat man kein zentrales Header-File, muss man das immer wieder irgendwo eintragen.

Es gibt bestimmt noch etliche andere Lösungen, doch alle sind irgendwie umständlich oder fehleranfällig.

Mit dtell() kann man Debugging z.B. so realisieren:

public void test()
{
  int i,j;
  mapping map;
  string *arr;

   i = 1;
   j = 2;

   map = (["test": 3]);

   arr = ({1,2,3});

   // Eine Meldung an It
   dtell("it","Mal schauen, ob das Programm bis hierher kommt.");
     // Das sieht dann wie folgt aus:
     //  [DTELL] /players/it/test/test
     //  [DTELL] Mal schauen, ob das Programm bis hierher kommt.

   
   // Eine Meldung an It und Harrypotter
   dtell( ({"it","harrypotter"}),"Meldung an mehrere Magier.");

   // Man kann sich natürlich auch eine Variable anzeigen lassen:
   dtell( ({"it"}),i);
     // Das sieht dann wie folgt aus:
     //  [DTELL] /players/it/test/test
     //  [DTELL] 1

   // Oder auch mehr als eine Vatiable:
   dtell( ({"it"}), ({ i,j }) );
     // Das sieht dann wie folgt aus:
     //  [DTELL] /players/it/test/test
     //  [DTELL] ({ /* #1, size: 2 */
     //  [DTELL]   1,
     //  [DTELL]   2
     //  [DTELL] })

   // natürlich kann man auch Arrays wie Mappings anzeigen:
   dtell( ({"it"}), map);
    // Das sieht dann so aus:
    //  [DTELL] /players/it/test/test
    //  [DTELL] ([ /* #1 */
    //  [DTELL]   "test": 3
    //  [DTELL] ])

   // oder alles auf einmal, indem man diese Variablen ebenfalls in ein
   // Array packt und sich dieses anzeigen lässt:
   dtell( "it", ({i, j, map, arr}) );
     // Das sieht dann so aus:
     //  [DTELL] /players/it/test/test
     //  [DTELL] ({ /* #1, size: 4 */
     //  [DTELL]   1,
     //  [DTELL]   2,
     //  [DTELL]   ([ /* #2 */
     //  [DTELL]     "test": 3
     //  [DTELL]   ]),
     //  [DTELL]   ({ /* #3, size: 3 */
     //  [DTELL]     1,
     //  [DTELL]     2,
     //  [DTELL]     3
     //  [DTELL]   })
     //  [DTELL] })

}

Fazit: Nicht verzweifeln und öfters mal dtell() benutzen 🙂

Gruß,

– It –