Debuggen von node.js mit Node-Inspector

69

Ich versuche, meine nodejs-App mit node-inspector zu debuggen. Google Chrome zeigt den Code jedoch nicht an.

Ich benutze Folgendes:

Node.js: v0.10.26

Express: 4.0.0

Knoteninspektor: v0.7.3

Google Chrome-Version: 34.0.1847.131

Dies ist, was ich tue, um den Debugger zu starten.

$ node-inspector
Node Inspector v0.7.3
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

In einer anderen Konsole

$ node --debug app.js 
debugger listening on port 5858
$

Dann startete Google Chrome und ging zu

http://127.0.0.1:8080/debug?port=5858

Es öffnet den Node-Inspector, jedoch ohne Code. Alle Fenster sind leer.

Es wurde festgestellt, dass der Express-Server nicht auf Port 3000 lauscht.

Versucht alle nach Node-Inspector keine Verbindung zum Node herzustellen, aber kein Glück

Konnte nicht herausfinden, was mir fehlt. Wäre toll, wenn Sie Vorschläge hätten. Also kann ich meine Node.js-Apps in Google Chrome debuggen.

Genwip
quelle
3
1. Versuchen Sie, Node-Inspector mit der Option --no-pretoad auszuführen.
Miroslav Bajtoš
1
2. Überprüfen Sie die DevTools-Konsole von Chrome. Gibt es Fehler?
Miroslav Bajtoš

Antworten:

122

Versuche node --debug-brk app.jsstatt nur zu rennen --debug. Ihre Anwendung wird möglicherweise nicht angehalten, bevor sich der Knoteninspektor in den Knotenprozess einfügt. Mit --debug-brkwird der Knoten gezwungen, in der ersten Zeile Ihrer App zu brechen und darauf zu warten, dass ein Debugger an den Prozess angehängt wird. Durch das Laden der Node-Inspector-Weboberfläche wird Node-Inspector an Ihren Node-Prozess angehängt. Aus diesem Grund fügen Sie den Knoten-Debug-Port in die Abfragezeichenfolge ein (localhost: 8080 / debug? port = 5858). Sie teilen dem Node-Inspector mit, an welchen Port er gelangen und an ihn angeschlossen werden soll.

Hier ist ein animiertes GIF, das ich zusammengestellt habe und das eine vollständige Installation und Ausführung von Node-Inspector zeigt.

Im GIF benutze ich die --debug Flag, weil ich keinen Code debugge, der direkt beim Start ausgeführt wird. Ich debugge in einem Anforderungshandler, der nur ausgelöst wird, wenn die Seite angefordert wird. Das Aktualisieren der Seite führt daher dazu, dass der Knoteninspektor in dieser Zeile unterbrochen wird.

Ich habe vor einiger Zeit auch ein 15-minütiges YouTube-Tutorial zusammengestellt.

http://youtu.be/03qGA-GJXjI

Ich hoffe das hilft!

Chev
quelle
1
Danke Alex, ich habe dein YouTube-Video schon einmal überprüft. Sehr informativ, danke. --debug-brk hat den Trick für mich gemacht ... aber wenn ich einen Haltepunkt in eine meiner Routen gesetzt habe. In meinem Fall experimentiere ich mit Cheerio + Anfrage, eine Website zu kratzen. Ich habe eine Route erstellt, sagen wir scrape.js. Ich hoffe, diese Datei zu debuggen. Aber sie erreicht nicht den Haltepunkt. Fehlt mir etwas?
Genwip
Ich bin mir nicht sicher. Ohne Codebeispiel ist es schwer zu wissen. Können Sie den gesamten Code, der bis zu dem Punkt ausgeführt wird, an dem diese Route deklariert ist, zusammen mit der URL, zu der Sie navigieren, einfügen , um den Anforderungshandler auszulösen?
Chev
1
@AlexFord: Wie haben Sie es geschafft, dieses GIF zu erstellen? Ich finde es wirklich cool und kann sehr hilfreich sein
SharpCoder
@ SharpCoder Ich habe Camtasia verwendet , um ein Video aufzunehmen. In den erweiterten Exportoptionen können Sie animiertes GIF auswählen.
Chev
1
@ SutikshanDubey beziehen sich auf diese Antwort . Wenn Sie mit Schritt 3 fortfahren, stellen Sie sicher, dass Sie den node-inspectorBefehl und nicht den node-debugBefehl verwenden. Der node-debugBefehl führt sowohl Ihr Skript aus als auch startet den Node-Inspector-Server. Sie möchten nur den Server starten, nicht Ihr Skript. Dann können Sie Ihr Skript separat mit dem --debug-brkFlag starten .
Chev
22

Node-Inspector versucht standardmäßig, den gesamten Code vorzuladen, bevor das Debug-Fenster gestartet wird. Ich hatte Instanzen, Node-Inspector hängt wegen dieses Vorladens für immer. Glücklicherweise haben die neueren Versionen die Option, das Vorladen zu stoppen, wodurch das Laden des Inspektors schneller wird.

Versuchen node-inspector --no-preload

Jerome Anthony
quelle
Sehr hilfreich! Auch ich hatte dieses blöde Problem, wenn ich lieber sofort auf Haltepunkte stoßen möchte. Danke für den Tipp!
Chev
6

Das Standard-Remote-Debugging ist in Knoten 6.5 vollständig fehlerhaft. Es wird jedoch durch eine neue interne Knotenfunktion ersetzt

$ node --inspect --debug-brk build/server/server.js
Debugger listening on port 9229.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
    chrome-devtools://devtools/remote/serve_file/@62cd277117e6f8ec53e31b1be58290a6f7ab42ef/inspector.html?experiments=true&v8only=true&ws=localhost:9229/node
Debugger attached.

Weitere Informationen finden Sie hier - http://arveknudsen.com/?p=346%3Fpage_id%3D346&print=pdf

elmpp
quelle
1
Du hast gerade meinen Tag gerettet! Node-Inspector wird nicht mehr benötigt.
Steffen Langer
hmm, in meinem Fall gibt es mir eine URL, die mit "ws: //" beginnt ... der Computer ist ein kopfloser Server, also habe ich die Option host: port übergeben, aber ich kann das "ws: //" immer noch nicht öffnen "URL in meiner lokalen Instanz von Chrome
Michael
1

--debug-brk ist jetzt veraltet

Versuchen Sie node --inspect-brk <your starting file name> und gehen Sie dann zu Chrome und geben Sie url ein chrome://inspectund klicken Sie auf Open dedicated DevTools for Node, der Debugger wird gestartet, ohne dass ein Node-Inspector erforderlich ist

Vinay Gosain
quelle
0

Geben Sie hier die Bildbeschreibung ein

Auf der linken Seite des Knoteninspektors, Registerkarte "Quellen", befindet sich "ein Feld mit einem Dreieck". Durch Hervorheben wird "Navigator anzeigen" angezeigt. (Siehe Bild oben). Öffnen Sie das, um die Dateien zu finden, die Sie debuggen möchten, und setzen Sie einen Haltepunkt für Code, der noch nicht ausgeführt wurde.

Beachten Sie außerdem, dass Sie beim Starten von Code, der auf dem Startknoten ausgeführt wird, die --debug-brkOption beim Starten verwenden müssen. Dann müssen Sie im Node Inspector die App F8starten ( um alle auszuführen). Sie benötigen diese Option, wenn Sie den gesamten Initialisierungscode debuggen möchten, z. B. einen Webbrowser starten.

Lehm
quelle
Danke Clay, --debug-brk scheint funktioniert zu haben. Anfangs hat es aber nicht funktioniert. Aber nachdem ich es ein paar Mal versucht habe. Es hat funktioniert.
Genwip
0

node-debug --no-preload app.js

Das ist es, was für mich funktioniert. Accoriding auf diese :

Mein Skript läuft zu schnell, um den Debugger anzuhängen.

Der debuggte Prozess muss mit --debug-brk gestartet werden. Auf diese Weise wird das Skript in der ersten Zeile angehalten.

Hinweis: Node-Debug fügt diese Option standardmäßig für Sie hinzu.

Nevin Madhukar K.
quelle