API: Debuggen

Wann immer Sie Programme schreiben (von den einfachsten bis zu den fortgeschrittensten), werden Sie unweigerlich auf Fehler stoßen, die zu Fehlfunktionen des Programms führen. Aufgrund des Sandbox-Charakters der Roll20-API kann es etwas schwierig sein, genau zu sagen, was vor sich geht. Hier finden Sie einige Tipps, die Ihnen bei der Diagnose von Problemen mit Ihren Skripts helfen können.


on("change:graphic:left", function(obj) {
   //Was ist der linke Wert des Objekts, der hier einfließt?
   log(obj.get("left"));
   obj.set("left", obj.get("left") + 70);
   //Was ist jetzt?
   log(obj.get("left"));
   //Sie können auch ganze Objekte debuggen, um eine Liste ihrer aktuellen Attribute anzuzeigen
   log(obj);
});

Die Ausgabe Ihrer Protokollbefehle finden Sie in der API-Konsole, die sich auf der Seite „Skripteditor“ für Ihre Kampagne befindet.


Fehlersperren

Die Roll20-API behebt kleine Fehler in Ihrem Skript automatisch, indem sie Ihr Skript bei Bedarf neu startet. Wenn die API jedoch einen schwerwiegenden Fehler erkennt, den sie nicht beheben kann, wird Ihre Kampagne mit einer „Fehlersperre“ versehen, was dazu führt, dass Ihr Skript nicht immer wieder neu gestartet wird, nur um weiterhin Fehler zu verursachen API-Skripte werden nicht ausgeführt, bis der Fehler behoben ist. Wenn Ihre Skripte durch einen Fehler gesperrt wurden, wird auf der Seite „Skripteditor“ eine Meldung wie diese angezeigt:

Fehler lock.png

Mach dir keine Sorgen! Nehmen Sie einfach Änderungen an Ihren Skripten vor, um das Problem zu lösen, und klicken Sie dann auf die Schaltfläche „Skript speichern“. Wenn Sie dies tun, wird die Fehlersperre „aufgehoben“ und die API versucht erneut, Ihre Skripte auszuführen. Tritt ein weiterer Fehler auf, wird die Fehlersperre erneut angewendet. Sie können diesen Vorgang so oft wie nötig wiederholen, um den Fehler zu beheben. Die API wird Sie nie davon abhalten, Ihre Fehlersperren zu löschen, weil Sie zu oft fehlgeschlagen sind.


Häufige Fehler

Nachfolgend sind einige häufiger auftretende Fehler aufgeführt:


myvar ist nicht definiert

on("ready", function() {
    var myVar;
    log(myvar);
});

Während in der Fehlermeldung „nicht definiert“ steht, ist tatsächlich passiert, dass die Variable nicht alsdeklariertist. Eine der häufigsten Ursachen hierfür ist ein Tippfehler im Namen einer Ihrer Variablen, beispielsweise das Fehlen eines Großbuchstabens.


Die Eigenschaft „myProperty“ kann nicht gelesen werden oder die Methode „myMethod“ kann nicht aufgerufen werden.

on("ready", function() {
    var myVar;
    log(myVar.myProperty);
    log(myVar.myMethod());
});

myVarist nicht definiert, daher kann das Skript nicht herausfinden, wie es mit Ihrem Versuch umgehen soll, auf eine Eigenschaft vonmyVarzuzugreifen. Dies liegt wahrscheinlich an einem der folgenden Gründe:

  • Sie haben versucht, ein Objekt zu finden, aber das Ergebnis war undefiniert. Führen Sie eine Fehlerprüfung durch, um sicherzustellen, dass Ihre Variable definiert ist, bevor Sie auf ihre Eigenschaften zugreifen.
  • Ihre Variable wird bedingt definiert (mit einer Reihe von-wennAnweisungen oder etwas Ähnlichem) und keine Ihrer Bedingungen stimmte überein, sodass Ihre Variable dort deklariert, aber nie definiert wurde. Stellen Sie sicher, dass Sie Bedingungen für alle Möglichkeiten haben, oder legen Sie eine Standardoption fest oder führen Sie eine Fehlerprüfung durch, um sicherzustellen, dass Ihre Variable definiert ist, bevor Sie auf ihre Eigenschaften zugreifen.

Unerwartetes Token

Entweder fehlt Ihnen ein Zeichen oder Sie haben ein Zeichen zu viel. Dies kann darauf zurückzuführen sein, dass ein Komma zwischen einer Liste von Eigenschaften in einem Objekt oder Elementen in einem Array vergessen wird oder dass am Ende eines komplizierten verschachtelten Methodenaufrufs eine zu viele oder zu wenige schließende Klammer steht.


Auf die meisten Eigenschaften in den Roll20-Objekten muss über die Methodenget()undset()zugegriffen werden. Wenn Sieget()verwenden, sollten Sie den führenden Unterstrich bei schreibgeschützten Eigenschaften weglassen.

War dieser Beitrag hilfreich?
14 von 104 fanden dies hilfreich