/
Verbinden zum Chrome DevTools (CDT)

Verbinden zum Chrome DevTools (CDT)

Initialisierung

Um serverseitige JavaScript Events in enaio® server zu debuggen, werden die Chrome DevTools (CDT) verwendet. Die V8-Inspector-Schnittstelle setzt voraus, dass die Verbindung zum Debugger in den CDT nicht aktiv aufgebaut werden kann. Stattdessen wird CDT die Verbindung zu oxv8 aufbauen. CDT schickt daher periodisch Http-Pings an die entsprechend konfigurierte Portnummer. Wenn in der Scriptengine ein debugfähiger Prozess abläuft, antwortet die Inspectorseite in der Scriptengine entsprechend und die clientseitige CDT baut eine Websocket-Verbindung auf. Über diese Verbindung erfolgt dann die Kommunikation mit V8.

Der Browser muss also gestartet sein und CDT darin geöffnet, damit die Gegenseite in der Scriptengine unter der konfigurierten Portnummer beobachtet werden kann. Dazu wird im Browser die Adresse chrome://inspect eingegeben. Es öffnet sich die entsprechende browserseitige Konfigurationsseite. Dort muss der Bereich Devices geöffnet werden.

Die CheckBox Discover network targets muss angewählt sein. Unter dem Punkt Configure... werden die Adresse des entsprechenden enaio® servers, sowie der Debugging Port eingetragen. Die Daten müssen mit den Werten für Host/Port in der oxv8.cfg übereinstimmen. 

Sind in einem größeren enaio® System bereits mehrere Server konfiguriert, ist hier der passende auszuwählen und auf Done zu klicken.

Nun wird vom CDT ständig (ca. alle 3 Sekunden) ein Http-Ping an einen entsprechenden TCP-Listener auf dem enaio® server gesendet. Im Fall, dass auf dem Server ein Skript gerade startet bzw. läuft und dieses für den Debugger entsprechend konfiguriert ist, wird eine Verbindungsanforderung an den CDT zurückgegeben. Im Browser wird die Debugging-Möglichkeit für das entsprechend aufgeführte Skript angezeigt.

"test-require" ist in diesem Fall der Skriptname. "file://oxv8-inspector" ist ein fester String.

Debugging

Möchte der Script-Entwickler nun debuggen, muss er auf den Link inspect klicken, andernfalls wird nach einer gewissen Zeit (StartTimeout aus der Konfigurationsdatei osv8.cfg) mit der normalen Skriptausführung fortgefahren. Im Falles des Debugging wird im Browser ein neues Fenster gestartet (ähnlich wie F12 beim Debuggen von Webpages). Der Chrome Debugger kann nun wie gewohnt genutzt werden.

Nachdem die Skriptausführung zu Ende ist, wird die Verbindung zum browserseitigen CDT geschlossen und die Programmausführung auf dem Server läuft normal weiter.

Wichtig:

Falls das CDT-Fenster während des Debuggings geschlossen wird, wird die Skriptausführung auf dem enaio® server ohne weiteres Debugging fortgeführt. Eine neue Verbindung zu CDT wird dabei nicht mehr aufgebaut.

Der V8-Inspector wartet nur gewisse Zeit bis die Verbindung zur CDT in einem Webbrowser aufgebaut wird. Falls die Verbindung zu CDT innerhalb der konfigurierten StartTimeout nicht aufgebaut wird, läuft der Skript ohne Inspector weiter. Ein neuer Versuch findet nicht statt. Falls mehrere Skripte (in mehreren Job-Threads) für Inspection konfiguriert sind, kann das dazu führen, dass all diese Jobs mindestens solange dauern.

Troubleshooting

Sollte es zu Problemen bei der Aktivierung des Debuggers kommen, kann in der osv8.cfg die entsprechende Inspector-Protokollierung (Trace=1 bzw. Trace=2) aktiviert werden. Mit Trace=2 werden beispielsweise die Http-Pings zwischen enaio® server und Browser protokolliert:

2022/01/03 13:09:05,275 | th # 56660 | 0000000182626930 | CInspectorIOServer::OnHttp [4] : GET /json/version
2022/01/03 13:09:05,282 | th # 56660 | 0000000182626930 | CInspectorIOServer::OnHttp [5] : GET /json

Falls diese Einträge nicht vorhanden sind, ist es ein Hinweis darauf, dass die Verbindung zwischen CDT und AppServer nicht besteht.

Wenn ein Skript auf das Http-Ping antwortet, erscheint im Log 

2022/01/03 13:11:57,928 | th # 50352 | 0000000182626930 | CInspectorIO::OnHttp [4] : answered with BE736865-B12E-4750-9E23-0AE48F081C6F

Beim Click auf inspect erscheinen viele weitere Einträge, die das laufende Inspector-Protokoll abbilden.

Related content