Debuggen einer Knotenanwendung, die auf einer VM mit Visual Studio-Code gehostet wird

8

Ich suche nach einer kleinen Hilfe beim Debuggen meiner App mit Visual Studio Code, wobei meine App in einer virtuellen Maschine gespeichert ist, die von Oracle Virtual Box gehostet wird.

Die VM wurde mit einem typischen Setup von node, express, node-inspector etc. ausgestattet und ich kann meine App mit dem node-inspector debuggen (dh der Port für node-inspector wurde innerhalb der vm und if weitergeleitet Ich richte meine App mit "node --debug-brk app.js" aus, sie überwacht Port 5858 und ich kann zu localhost navigieren: 8080 / debug? Port = 5858, um mit dem Debuggen zu beginnen.

Aber in VSC, wenn ich die "attach" -Option im Debug verwende, kann ich überhaupt nicht zu einem Haltepunkt gelangen.

Gibt es etwas Besonderes, dass ich hier vermisse oder gibt es irgendwelche Log-Dateien, die ich betrachten kann - Ich bin auf OSX Yosemite und das VM OS läuft in der virtuellen Box ist eine kopflose OpenSuse, bereitgestellt mit Vagrant?

Hinweis: Ich habe versucht, eine Telnet-Verbindung zur VM an Port 5858 herzustellen, und ich erhalte eine andere Antwort von der VM zur lokalen Maschine selbst, wie unten angegeben:

In der VM:

%Vor%

Einbettungs-Host: Knoten v0.10.32 Inhaltslänge: 0

Außerhalb der VM:

%Vor%

Jede Hilfe wäre sehr willkommen?

Ja, ich lasse VSCode außerhalb der VM laufen - Die VM ist kopflos.

Die Ports sind bereits so konfiguriert, dass sie innerhalb des vagrant Provisioning-Skripts weitergeleitet werden. Ein Kollege hat mir jedoch mitgeteilt, dass es möglicherweise eine Firmenrichtlinie gibt, die uns in Bezug auf unsere Netzwerkadapter auferlegt wird - Verhindern / Verursachen meines Verbindungsproblems.

Ich habe jedoch einen anderen Ansatz versucht. Ich habe eine Verbindung über SSH für den gesamten Verkehr auf Port 5858 getunnelt:

%Vor%

Wenn ich jetzt mit dem Debuggen der App beginne (d. h. node --debug app.js) und die attach-Option verwendet, wird der Debugger eindeutig angehängt. Es trifft meinen Haltepunkt in app.js jedoch nicht, wenn es sollte.

Wenn ich den Debugger pausiere, erhalte ich tatsächlich eine Liste der lokalen Variablen und eines Aufruf-Stacks, aber der folgende Fehler wird angezeigt:

%Vor%

Hinweis: app.js und die anderen Code-Dateien sind nicht auf der VM, sie werden auf meinem lokalen Rechner mit entsprechend konfigurierten Samba-Freigaben gehalten. Vielleicht verursacht dies die Verwirrung?

    
Nicholas Ford 08.05.2015, 09:34
quelle

3 Antworten

4

Ich habe überprüft, dass das Tunneling des Ports 5858 über ssh so weit funktioniert, dass Sie eine Verbindung zu Knoten innerhalb der VM herstellen und Debugger-Funktionalität ohne Quellpfade verwenden können (Quellpfade werden für Breakpoints und Step-Events verwendet, usw. ) Das Problem mit Quellpfaden besteht darin, dass VSCode Zugriff auf die Quelldateien mit denselben Pfaden wie der Knoten benötigt, der in der VM ausgeführt wird. Selbst wenn Sie die Quelle über Samba teilen, kann der absolute Pfad, der zu einer Datei führt, innerhalb und außerhalb der VM unterschiedlich sein. Die einzige Problemumgehung für die VSCode-Vorschau besteht darin, die Pfade identisch zu machen, z. durch Einführung von (symbolischen) Links etc. Ich habe einen Fehler auf unserer Seite erstellt, um den Quellpfad zu verbessern.

Andre Weinand, VisualStudio-Code

    
Andre Weinand 12.05.2015, 16:13
quelle
8

Meine Vagrant-Datei hat die folgende Zuordnung von meinem Host zu einer Ubuntu-VM:

%Vor%

Ich habe Knoten-Debugging in VS-Code, indem ich das getan habe:

  1. Port 5858 in der VM weiterleiten: config.vm.network :forwarded_port, host: 5858, guest: 5858

  2. Legen Sie in VS Code das folgende launch.json fest:

    { "version": "0.2.0", "configurations": [ { "name": "Attach", "type": "node", "request": "attach", "port": 5858, "address": "localhost", "restart": false, "sourceMaps": false, "localRoot": "${workspaceRoot}/api", "remoteRoot": "/home/app/api" } ] }

  3. In der VM: cd /home/app/api
  4. Ausführen node --debug server.js
  5. Öffnen Sie in VS Code den Ordner C:/Users/me/Documents/app , setzen Sie Haltepunkte und drücken Sie F5.

Wenn Sie an Port 5858 telnet und die gleichen Antworten von innerhalb und außerhalb der VM erhalten, bedeutet dies wahrscheinlich, dass die Zuordnung von Dateien falsch ist.

    
Maria Ines Parnisari 06.05.2016 04:28
quelle
1

Ich nehme an, dass Sie VSCode außerhalb der VM ausführen. VSCode ähnelt Ihrem Telnet von außerhalb der VM und kann daher nicht an den Port anhängen, da das v8-Debugprotokoll nicht erkannt wird.

Ich denke, Sie müssen Ihren VM-Hypervisor irgendwie so konfigurieren, dass er den 5858-Port von der VM auf den VM-Host abbildet.

Sie werden wissen, dass Sie es richtig gemacht haben, wenn Telnet von außerhalb der VM dasselbe wie Telnet von der VM aus ausgeben wird.

    
Alex Dima 08.05.2015 09:50
quelle

Tags und Links