Nachdem sich der Skript-Entwickler per Chrome DevTools (CDT) mit dem Debugging Host verbunden hat, gibt es zwei Möglichkeiten, um das Skript im Debugger anzuhalten:

Sofortiges Anhalten der Skriptausführung bei Verbindung mit Chrome DevTool

Der Schalter BreakOnStart legt fest, ob automatisch eine Verbindung zum Inspector hergestellt wird und automatisch ein Brechpunkt in der ersten Codezeile des Skripts gesetzt wird. 

In diesem Modus wird die Skriptausführung sofort nach Verbinden mit dem CDT an der ersten Zeile des Skripts angehalten.

Anhalten der Skriptausführung bei Bedarf an beliebiger Stelle im Skript

Ob die Verbindung vom Inspector sofort bei der Skriptausführung aufgebaut werden, kann durch den Parameter ConnectOnStart mit dem Wert true an verschiedenen Stellen gesteuert werden. Dabei wird die Skriptausführung nicht ohne weiteres angehalten.  

In diesem Modus kann – direkt aus dem Skriptcode – ein Breakpoint über das JS-Schlüsselwort debugger oder den Befehl rc.inspector.breakPointHere(false) an einer beliebigen Stelle im Skript gesetzt werden und damit die Skriptausführung gezielt an dieser Stelle angehalten werden. Wird aus dem Skript heraus kein Breakpoint gesetzt, wird das Skript ohne Anzuhalten ausgeführt. 

Alleiniges Steuern von Breakpoints aus dem Skript heraus

Falls weder die Parameter BreakOnStart noch ConnectOnStart gesetzt sind, kann trotzdem aus dem Skript heraus ein Breakpoint gesetzt und die Skriptausführung zum Anhalten gezwungen werden. Nötig ist in dieser Situation, dass der Inspector für diesen Event aktiviert wurde (entweder in oxv8.cfg oder in oxv8.metadata.cfg). Das wird über den Parameter Enabled (oder InspectorEnabled ) = 1 in einer der beiden Konfigurationsdateien erreicht. Im Skript können dann mit folgenden beiden API-Aufrufen das Anhalten des Skripts oder das Verbinden des Inspektors gesteuert werden:

In diesem Modus erfolgt die Steuerung des Debuggings vollständig aus dem Skriptcode heraus, sofern der Inspektor für den entsprechenden Event angeschaltet ist.

Schlüsselwort debugger

JS hat das Schlüsselwort debugger. Über dieses Schlüsselwort kann der Skriptcode an einer beliebigen Stelle angehalten werden, wenn eine Verbindung zum Inspector hergestellt ist. Dieser JS-Befehl hat die gleiche Wirkung wie rc.inspector.breakPointHere(false). 

Code

'use strict';
 
rc.console.log("script entry");
 
debugger;
 
rc.console.log("inspector enabled: " + rc.inspector.isEnabled());
rc.console.log("inspector connected: " + rc.inspector.isConnected());

Damit kann der Skript-Entwickler einen Brechpunkt programmatisch setzen. Allerdings hat dieses Schlüsselwort keine Auswirkung, wenn die Verbindung zu CDT nicht besteht. Möglichkeiten wie die Verbindung zum CDT programmatisch oder konfigurativ hergestellt werden können, sind in den obigen Ausführungen beschrieben.

Notifications

Es kann manchmal notwendig sein, benachrichtigt zu werden, wenn ein Skript auf CDT wartet. Auf diese Weise kann der Skript-Entwickler innerhalb des Timeouts reagieren und eine entsprechende situationsbedingte Entscheidung zum Abbruch eines möglichen Debugggings direkt im Skript treffen. 

Ist dies gewünscht, können folgende Schalter in der  oxv8.cfg gesetzt werden:

{"text":"oxv8 inspector: waiting for CDT","scriptName":"name des Skripts"}
msg USER-NAME Waiting for CDT: %1