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.