Menu

WWC Debugging

Ferenc Hechler

Für alle, die noch Probleme mit dem Debuggen ihrer Web-Worker haben:

  1. Die folgende Seite aufrufen: WWCToolHtml.html
    a) Dabei handelt es sich um eine statische Webseite, es werden keine Informationen auf den Server geladen oder sonstwohin transferiert.
    b) Alternativ kann auch das Archiv "WWCToolHtml.zip" von der Projektseite heruntergeladen und lokal entpackt werden. Im Hauptverzeichnis befindet sich die Startseite WWCToolHtml.html.
  2. Die beiden Web-Worker (Own / Opponent) auswählen
  3. Auf “Restart” klicken.
  4. Sobald es interessant wird mit einem Klick auf "Step" in den Einzelschrittmodus wechseln.
  5. Entwicklertools öffnen (<Strg>-<Shift>–”i”)
  6. Ganz unten rechts den Reiter “Workers” aufklappen
  7. Unter "Dedicated worker inspectors" den eigene Worker anklicken (kann eine der beiden URLs sein, zur Not raten).
  8. Es öffnet sich ein Fenster. Dort <Strg>-”o” drücken und die Sourcen dazu auswählen.
  9. Wenn es nicht der eigene Worker ist, dann ab Schritt 7. mit der andere URL wiederholen
  10. Auf die Zeilennummer klicken, an der ein Breakpoint gesetzt werden soll.
  11. Nächsten Schritt mit Klick auf "Step" ausführen, dann springt der entsprechende Worker in den Breakpoint und die Lokalen Variablen sind sichtbar und die Strategie kann gedebuggt werden.

ANMERKUNG: In der GUI kann eine Random-Seed gesetzt werden. Sofern diese ungleich 0 ist starten die Worker immer an der gleichen Position. Die Seed wird modifiziert an die Worker übergeben. Diese können den Wert nutzen um selbst reproduzierbare Abläufe zu generieren. Dazu muss der Worker-Code wie folgt angepasst werden:

Alle Vorkommen von Math.random() müssen ersetzt werden durch WorkerRAND.random().
Der Folgende Code muss an den Anfang des Workers gesetzt werden:

// ---------------- CODE for reproducible random numbers ----------------- //
function randomNext() {
    this.seed = (1103515245*this.seed+12345) % 2147483648;
    return this.seed / 2147483648;
}
function randomRAND(val) {
    this.seed = ((val!==0)&&(val!==undefined))?val*1020304050Math.floor(Math.random()*2147483648);
    this.random = randomNext;
}
var WorkerRAND = new randomRAND(2);
//------------------------------------------------------------------------ //

und in der onmessage() Methode muss WorkerRAND initialisiert werden. randomSeed wird beim ersten Aufruf des Workers übergeben.

// --------------------------------
onmessage = function (event) {
  // Initialisiere Reproduzierbare Zufallszahlen, 
  // wenn WorkerRAND.random() statt Math.random() verwendet wird.
  if (WorkerRAND === undefined) {
      WorkerRAND = new randomRAND(event.data.randomSeed);
  }
  ...
// --------------------------------

Related

Wiki: Home

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.