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 deiner Protokollbefehle findest du in der Mod (API) Konsole, die sich auf der Scripts Editor Seite für deine 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 feststellt, von dem sie sich nicht erholen kann, anstatt nur dein Skript immer wieder neu zu starten, nur um fortlaufend einen Fehler zu haben, wird sie einen „Fehler-Lock“ auf deine Kampagne setzen, der dazu führt, dass deine Mod (API) Skripte erst wieder ausgeführt werden, wenn 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?
15 von 109 fanden dies hilfreich