Wie debugge ich Node.js-Anwendungen?

1578

Wie debugge ich eine Node.js-Serveranwendung?

Im Moment verwende ich hauptsächlich das Alarm-Debugging mit Druckanweisungen wie diesen:

sys.puts(sys.inspect(someVariable));

Es muss einen besseren Weg zum Debuggen geben. Ich weiß, dass Google Chrome einen Befehlszeilen-Debugger hat. Ist dieser Debugger auch für Node.js verfügbar?

Fabian Jakobs
quelle
3
Sie können Locus für die Befehlszeileninjektion verwenden.
Ali Davut
5
Wenn Sie mit dem traditionellen IDE-Ansatz debuggen möchten, verwenden Sie vscode. Verwenden Sie vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578
4
Ich fand diesen Artikel sehr interessant und er funktioniert gut für mich: Debuggen von Node.js mit Chrome DevTools . Hoffe es hilft :)
Timbergus
2
"alert debugging" :)
Die rote Erbse
Beachten Sie, dass Sie nod mit --inspect-brkINSTEAD OF ausführen müssen, --inspectwenn Sie den tatsächlichen Servercode beim Laden debuggen möchten. Siehe stackoverflow.com/questions/59596138
Jorge Orpinel

Antworten:

1261

Node-Inspector könnte den Tag retten! Verwenden Sie es in jedem Browser, der WebSocket unterstützt . Haltepunkte, Profiler, Live-Codierung usw. Es ist wirklich großartig.

Installieren Sie es mit:

npm install -g node-inspector

Dann renne:

node-debug app.js
Daralthus
quelle
14
Ich wünschte, der Knoteninspektor wäre aktiv. Die Profiling-Komponente muss etwas Liebe bekommen.
Jonathan Dumaine
13
Leider funktioniert Node-Inspector nicht mit den neuesten Versionen von Node.js und unterstützt seit v0.1 die Protokollierung an der Browserkonsole nicht mehr. Node-Codein war nur fehlerhaft. Also habe ich mein eigenes Modul geschrieben, um beim Debuggen zu helfen, indem Sie Objekte und dergleichen auf Ihrer Webbrowser-Konsole ausgeben können. Ich dachte, es könnte jemand anderem von Nutzen sein: Node-Monkey . Außerdem funktioniert es sowohl in Firefox als auch in Chrome.
Justin Warkentin
7
Da dies ein anscheinend erstaunliches und beliebtes Tool war, wäre die Tatsache, dass der ursprüngliche Autor zugegeben hat, dass er nicht mehr über die Ressourcen verfügt, um es zu warten, sicherlich kein Problem, da die Open-Source-Community es aufgreifen könnte.
PeterT
34
Jetzt wird der Inspektor jetzt von StrongLoop aktiv gewartet und arbeitet wieder mit der neuesten Version (0.3) yay! Ankündigung hier: blog.strongloop.com/…
Balupton
21
"Seit Version 6.3 bietet Node.js einen integrierten DevTools-basierten Debugger, der den Node Inspector größtenteils ablehnt. Weitere Informationen finden Sie in diesem Blogbeitrag . Der integrierte Debugger wird direkt vom V8 / Chromium-Team entwickelt und bietet einige erweiterte Funktionen Funktionen (z. B. lange / asynchrone Stapelspuren), die in Node Inspector zu schwierig zu implementieren sind. " - sagt der Node Inspector Repo
ThisClark
750

Debuggen

Profilerstellung

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

Heapdumps

Flammengraphen

Rückverfolgung

Protokollierung

Bibliotheken, die Debugging-Informationen ausgeben

Bibliotheken, die die Stapelverfolgungsinformationen verbessern

Benchmarking

Andere

Erbe

Diese funktionieren, sind jedoch nicht mehr gewartet oder für moderne Knotenversionen nicht mehr anwendbar.

Balupton
quelle
8
Informationen zu Nodetime: Für diejenigen, die ihre Daten nicht an Nodetime-Server senden möchten, gibt es eine lokale "Alternative" (die immer noch auf Nodetime basiert), das lookModul, wie in stackoverflow.com/questions/12864221/nodejs-memory- beschrieben. Profiling
wirklich schön
Ich finde die CPU-Berichte von nodetime nicht sehr hilfreich: 1. Ich bekomme nur einen Methodenbaum ohne "Selbst" -Zeit. 2. Scheint, als ob die Äste unterhalb einer bestimmten Anzahl von Prozentsätzen abgeschnitten sind. Diese 2 machen es sehr schwierig zu verstehen, wo die CPU die meiste Zeit verbringt.
Shacharz
npm install -g profiler beschwert sich über fehlendes Python unter Windows 7. Ich habe versucht, python = C: \ Python34 \ zu setzen, aber dies führt zu einem Absturz.
Stepan Yakovenko
Der einzige Profiler, der sofort funktioniert, ist die Nodetime. Die Stapelverfolgung der CPU-Profilerstellung ist jedoch unbrauchbar (sie enthält nicht genügend Details). Nodejs Tools 4 msvc 2012 haben auch Profiler, aber es hat auch kritische nicht behobene Fehler gemeldet ...
Stepan Yakovenko
Der einzige Profiler, der für mich funktioniert hat, war nprof+ v8.logvon node --prof.
Dan Abramov
253

Der im Rahmen der Google Chrome Developer Tools veröffentlichte V8- Debugger kann zum Debuggen von Node.js-Skripten verwendet werden. Eine detaillierte Erklärung, wie das funktioniert , kann in dem gefunden werden Node.js GitHub Wiki .

Fabian Jakobs
quelle
12
Ich bin interessiert, ob es nach der Präsentation von Paul Irish und Pavel bei Google IO nun möglich ist, node.js direkt in Chrome Developer Tools zu debuggen, ohne dass eine Sonnenfinsternis erforderlich ist.
Balupton
+1 Hat sehr gut für mich funktioniert. Verwenden einer neuen Eclipse 3.x, x64-Version unter Mac OS X. Die Installationsanweisungen sind ebenfalls gut geschrieben. Vielen Dank.
Amateur Barista
Kommt auch in Nodeclipse nodeclipse.org (mit einigen Node.js bezogenen Fehlern behoben)
Paul Verest
Mein Eintritt in diese Arena ist trepanjs ( npmjs.com/package/trepanjs ). Es hat alle Vorteile des Node-Debuggers, entspricht jedoch besser der GDB. Es hat auch mehr Funktionen und Befehle wie Syntaxhervorhebung, umfangreichere Online-Hilfe und intelligentere Auswertung. Unter github.com/rocky/trepanjs/wiki/Cool-things finden Sie einige der coolen Funktionen.
Rocky
1
Die Funktion ist derzeit in den nächtlichen Versionen verfügbar. Hier finden Sie Anweisungen:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
Zeronone
191

Node verfügt ab Version 6.3 über einen eigenen integrierten GUI-Debugger (mit den DevTools von Chrome).

Im GUI-Debugger integrierte Knoten

Übergeben Sie einfach die Inspektorflagge und Sie erhalten eine URL zum Inspektor:

node --inspect server.js

Sie können auch in der ersten Zeile brechen, indem Sie --inspect-brkstattdessen übergeben.

Alister
quelle
2
Nicht um die obigen Schritte zu ignorieren, sondern nur um sie zu teilen ... Ich habe versucht, einen Wrapper zu erstellen, der etwas robuster und einfacher zu installieren ist. Siehe: github.com/jaridmargolin/inspect-process
Jarid R. Margolin
1
@ JaridR.Margolin Schön. Ich habe die Antwort aktualisiert, um sie stattdessen zu verwenden. Viel einfacher
einzurichten
2
Diese Antwort befindet sich derzeit ganz unten und ist die einzige, die tatsächlich für mich funktioniert hat. Das ist großartig!
LOAS
3
Für den Fall, dass es jemandem hilft, habe ich unter youtu.be/rtZKUnks6jI ein Video veröffentlicht, in dem dieser Prozess erklärt wird .
RoccoB
2
Woher hast du das dunkle Thema für die Chrome-Entwicklertools?
Pieter Meiresone
93

Node.js Version 0.3.4+ bietet integrierte Debugging-Unterstützung.

node debug script.js

Handbuch: http://nodejs.org/api/debugger.html

JulianW
quelle
1
Haben Sie Links zur Dokumentation der Verwendung?
Fabian Jakobs
2
Ich habe keine Dokumente. gerade auf v0.3.5 aktualisiert. Setzen Sie eine Zeile "Debugger"; in Ihrem Code, der als Haltepunkt fungiert. Es funktioniert wie ndb / gdb. Nachdem Sie "node debug script.js" ausgeführt haben, geben Sie help ein. Sie sehen den Befehl, den es unterstützt. p = print, l = list ... damit Sie nicht die ganze Welt
eingeben müssen
2
Beachten Sie, dass es unter Windows "node.exe --debug myscript.js" ist, aber es funktioniert immer noch nicht.
Marc
6
Sie müssen sich vermutlich ändern , --debugum debugohne die Bindestriche. So habe ich es endlich zum Laufen gebracht. Es ist verwirrend, das zu tun --debugund debugzwei verschiedene Dinge zu tun.
Benekastah
Wie bringt man das Programm dazu, tatsächlich zu laufen? "r -> app is already running...", wenn ich versuche fortzufahren und auf eine Anweisung stoße, die versucht, Eingaben zu erhalten, wird ich an der Debug-Eingabeaufforderung zurückgesetzt, anstatt die erforderliche Eingabe eingeben zu lassen.
Michael
70

Visual Studio Code wird meine Wahl für das Debuggen sein. Kein Aufwand für die Installation von Werkzeugen oder anderennpm installDingen. Legen Sie einfach den Startpunkt Ihrer App in package.json fest und VSCode erstellt automatisch eine Konfigurationsdatei in Ihrer Lösung. Es basiert aufElectron, auf dem Editoren wie Atom basieren.

VS-Code bietet ähnliche Debugging-Erfahrungen wie in anderen IDEs wie VS, Eclipse usw.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Shreyas
quelle
Es ist cool, aber es hat Verzögerung. Deshalb bevorzuge ich Sublime jemals.
Calbertts
3
Aber Sublime hat keinen Debugger und ich denke, VS-Code ist auch ziemlich schnell
Syed Faizan
1
Ich habe seit 5 Jahren eine großartige Lizenz. Seit ein paar Monaten installiere ich nicht einmal Sublime Text, sondern nur vscode. Out of the Box hat viele Tools, die ich in Sublime vermisse (wie das integrierte Terminal ..).
Elboletaire
Ich werde immer nach einem Konfigurationsordner gefragt, es funktioniert nicht
sofort
@carkod aktivieren vs Code Auto Attach Präferenz und verwenden Sie das vs Code Terminal , um Ihr Skript zu starten, ex Knoten --inspect file-name.js
Vipul Dessai
57

Ich persönlich verwende JetBrains WebStorm, da es die einzige JavaScript-IDE ist, die ich gefunden habe und die sowohl für Frontend- als auch für Backend-JavaScript geeignet ist.

Es funktioniert auf mehreren Betriebssystemen und verfügt über ein integriertes Debugging von Node.j (sowie eine Menge anderer Dinge) ( http://www.jetbrains.com/webstorm/features/index.html ).

Meine einzigen "Probleme" / Wunschliste Artikel sind waren :

  1. Es scheint auf Mac mehr Ressourcen zu hungern als unter Windows In Version 6 scheint dies kein Problem mehr zu sein.
  2. Es wäre schön, wenn es Snippet-Unterstützung hätte (wie die von Sublime Text 2 - dh geben Sie 'fun' ein und tippen Sie auf 'tab', um eine Funktion einzufügen. Siehe @ WickyNilliams Kommentar unten - Mit Live-Vorlagen haben Sie auch Snippet-Unterstützung.
isNaN1247
quelle
10
Webstorm unterstützt übrigens Snippets ;-), obwohl sie als "Live-Vorlagen" anstelle von Snippets bezeichnet werden.
WickyNilliams
3
Wenn Sie nur eine node.js-App debuggen möchten und bereits über eine Intellij IDEA-Lizenz verfügen, können Sie einfach das node.js-Plugin installieren, ohne die WebStorm-Lizenz kaufen zu müssen. Das Einrichten einer Run / Debug-Konfiguration ist nach der Installation des Plugins sehr einfach.
Josh Liptzin
42

Viele gute Antworten hier, aber ich möchte meine Ansicht hinzufügen (basierend auf der Entwicklung meines Ansatzes).

Debug-Protokolle

Seien wir ehrlich , wir alle lieben ein gutes console.log('Uh oh, if you reached here, you better run.')und manchmal funktioniert das großartig. Wenn Sie sich also zurückhalten, sich zu weit davon zu entfernen, fügen Sie Ihren Protokollen mit Visionmedias Debug zumindest etwas Bling hinzu .

Interaktives Debuggen

So praktisch die Konsolenprotokollierung auch sein mag, um professionell zu debuggen, müssen Sie die Ärmel hochkrempeln und stecken bleiben. Setzen Sie Haltepunkte, gehen Sie Ihren Code durch, überprüfen Sie Bereiche und Variablen, um festzustellen, was dieses seltsame Verhalten verursacht. Wie andere bereits erwähnt haben, sind Node-Inspector wirklich die Bienenknie. Es bietet alles, was Sie mit dem integrierten Debugger tun können, verwendet jedoch die bekannte Chrome DevTools-Oberfläche. Wenn Sie wie ich Webstorm verwenden , finden Sie hier eine praktische Anleitung zum Debuggen von dort aus.

Stapelspuren

Standardmäßig können wir eine Reihe von Operationen nicht über verschiedene Zyklen der Ereignisschleife (Ticks) verfolgen. Um dies zu umgehen, schauen Sie sich Longjohn an (aber nicht in Produktion!).

Speicherlecks

Mit Node.js können wir einen Serverprozess haben, von dem erwartet wird, dass er längere Zeit aktiv bleibt. Was machst du, wenn du denkst, dass es einige böse Lecks gegeben hat? Verwenden Sie Heapdump und Chrome DevTools, um einige Schnappschüsse zu vergleichen und zu sehen, was sich ändert.


Einige nützliche Artikel finden Sie unter

Wenn Sie sich ein Video ansehen möchten, dann

Egal für welchen Pfad Sie sich entscheiden, stellen Sie sicher, dass Sie verstehen, wie Sie debuggen

Geben Sie hier die Bildbeschreibung ein

Es ist eine schmerzhafte Sache
, auf deine eigenen Probleme zu schauen und zu wissen,
dass du es selbst und niemand anderes geschafft hast

Sophokles, Ajax

Philip O'Brien
quelle
41

Theseus ist ein Projekt von Adobe Research, mit dem Sie Ihren Node.js-Code in den Klammern des Open Source-Editors debuggen können . Es verfügt über einige interessante Funktionen wie Echtzeit-Codeabdeckung, rückwirkende Überprüfung und asynchronen Aufrufbaum.

Bildschirmfoto

Sindre Sorhus
quelle
das ist ziemlich cool, weiß immer noch nicht, was Backtrace für tho
misaxi
Ich liebe Theseus derzeit, aber ich habe immer noch einige Probleme, bei denen ich einen Haltepunkt setzen und nachverfolgen muss. Ich muss derzeit meine App beenden, den Knoten mit --debug starten, durchverfolgen und dann die App mit node-Theseus starten. Ist es möglich, Theseus mit Haltepunkten zu verwenden? Ich habe versucht, die GitHub-Seite, StackOverflow und Foren zu durchsuchen, aber bisher ohne Glück. Vermisse ich etwas
Eugene
25

Node.js Tools für Visual Studio 2012 oder 2013 enthält einen Debugger. In der Übersicht wird angegeben , dass "Node.js Tools für Visual Studio das Debuggen von Knoten-Apps vollständig unterstützt." Ich bin neu in Node.js, habe aber einen Hintergrund in .NET und habe festgestellt, dass dieses Add-In eine großartige Möglichkeit ist, Node.js-Anwendungen zu debuggen.

John81
quelle
23

Visual Studio Code bietet eine wirklich gute Debugging-Unterstützung für Node.js. Es ist kostenlos, Open Source und plattformübergreifend und läuft unter Linux, OS X und Windows.

Sie können sogar Grunz- und Schluckaufgaben debuggen , falls Sie ...

Hans
quelle
1
Ab Visual Studio Code 8.0 wurde die Debugging-Unterstützung für OSX und Linux sehr gut.
Bgse
Nachdem Sie einen ganzen Abend damit verbracht haben, Node-Inspector und Strongloop unter Windows zum Laufen zu bringen (Visual Studio Community, Downgrade auf npm 2, Installation von Python, env-Variablen, Verwendung von cmd not babun / cygwin usw. usw.) und dann eine Stunde lang damit spielen Ich muss sagen, dass dies die beste Option ist, zumindest in Windows und möglicherweise im Allgemeinen (wenn Sie kein Webstorn haben)
dashambles
22

Ich habe einen anderen Ansatz zum Debuggen von Node.js Code geschrieben, der stabil und extrem einfach ist. Es ist unter https://github.com/sa/iron-node verfügbar .

Geben Sie hier die Bildbeschreibung ein

Ein plattformübergreifender Open Source-Debugger.

Installation:

npm install iron-node -g;

Debuggen:

iron-node yourscript.js;

Stephan Ahlf
quelle
15

Verwenden von Chrome Version 67.0.3396.62 (+)

  1. Führen Sie die Knoten-App aus

Knoten --inspect-brk = 0.0.0.0: 9229 server.js (Dateiname des Servers js)

  1. Durchsuchen Sie Ihre App in Chrome, z. B. "localhost: port".
  2. Öffnen DevTools.
  3. Klicken Sie auf das Knotensymbol neben dem Symbol für das reaktionsfähige Gerät.

Geben Sie hier die Bildbeschreibung ein

Es wird ein weiteres DevTools-Fenster geben, das speziell zum Debuggen der Knoten-App angezeigt wird.

Geben Sie hier die Bildbeschreibung ein

babidi
quelle
13

Ich habe ein hübsches kleines Tool namens pry.js erstellt , das Ihnen helfen kann.

Fügen Sie eine einfache Anweisung irgendwo in Ihren Code ein, führen Sie Ihr Skript normal aus, und der Knoten stoppt den aktuellen Thread, sodass Sie auf alle Ihre Variablen und Funktionen zugreifen können. Anzeigen / Bearbeiten / Löschen nach Belieben!

var pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) // magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()
Blaine
quelle
11

In Node.js gibt es einen integrierten Befehlszeilen- Debugger-Client. Cloud 9 IDE haben auch einen ziemlich schönen (visuellen) Debugger .

yojimbo87
quelle
Cloud 9 ist der richtige Weg für mich und bietet insbesondere die Möglichkeit, überall Code frei zu haben, ohne meinen Laptop dabei zu haben.
Teoman Shipahi
10

Ich habe einen kurzen Node.js-Debugging-Primer für die Verwendung des Node-Inspector für diejenigen zusammengestellt, die sich nicht sicher sind, wo sie anfangen sollen.

Josh Habdas
quelle
8

Starten Sie Ihren Knotenprozess mit dem Flag --inspect .

node --inspect index.js

und dann chrome://inspectin Chrom öffnen . Klicken Sie auf den Link "Dedicated DevTools for Node öffnen" oder installieren Sie diese Chrome-Erweiterung, um Chrome DevTools einfach zu öffnen.

Weitere Informationen finden Sie unter diesem Link

Rahul Kumar
quelle
7

Wenn Sie eine leistungsstarke Protokollierungsbibliothek für Node.js benötigen, ist Tracer https://github.com/baryon/tracer die bessere Wahl.

Es gibt Protokollnachrichten mit einem Zeitstempel, einem Dateinamen, einem Methodennamen, einer Zeilennummer, einem Pfad oder einem Aufrufstapel aus, unterstützt die Farbkonsole und unterstützt den einfachen Transport von Datenbanken, Dateien und Streams. Ich bin der Autor.

Baryon Lee
quelle
7

Angenommen, Sie haben Node-Inspector auf Ihrem Computer installiert (wenn nicht, geben Sie einfach 'npm install -g Node-Inspector' ein), müssen Sie nur Folgendes ausführen:

node-inspector & node --debug-brk scriptFileName.js

Fügen Sie den URI über die Befehlszeile in einen WebKit-Browser (Chrome / Safari) ein.

Shaheen Ghiassy
quelle
1
Node-Inspector wurde bereits erwähnt; Vielleicht diese Antwort löschen?
Dan Dascalescu
5

IntelliJ funktioniert wunderbar für Node.js.

Darüber hinaus unterstützt IntelliJ die Code-Unterstützung gut.

Gy 声 远 Shengyuan Lu
quelle
4

Die NetBeans- IDE wird seit Version 8.1 von Node.j unterstützt :

<...>

Highlights der neuen Funktionen

Node.js Anwendungsentwicklung

  • Neuer Node.js-Projektassistent
  • Neuer Node.js Express-Assistent
  • Erweiterter JavaScript-Editor
  • Neue Unterstützung für die Ausführung von Node.js-Anwendungen
  • Neue Unterstützung für das Debuggen von Node.js-Anwendungen.

<...>

Zusätzliche Referenzen:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Node.js Express App in der NetBeans IDE, Geertjan-Oracle .
Sergey Brunov
quelle
4

Verwenden Sie diese Befehle

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
Zahirul Haque
quelle
3

Eine schnelle und schmutzige Möglichkeit, kleine Node.js-Skripte mit Ihrem bevorzugten Browser-Debugger zu debuggen , ist die Verwendung von browserify . Beachten Sie, dass dieser Ansatz nicht mit Anwendungen funktioniert, für die native E / A-Bibliotheken erforderlich sind. Er ist jedoch für die meisten kleinen Skripts ausreichend.

$ npm install -g browserify

Verschieben Sie nun alle Ihre var x = requires('x')Anrufe in eine requires.jsDatei und führen Sie Folgendes aus:

$ browserify requires.js -s window -o bundle.js

(Der Nachteil hier ist, dass Sie das requiresin all Ihren Dateien entweder verschieben oder kommentieren müssen .)

Fügen Sie das bundle.jswie folgt in eine HTML-Datei ein:

<script type="text/javascript" src="bundle.js"></script>

Laden Sie nun die Datei in Ihren Browser und drücken Sie F12und Viola: Debuggen im Browser.

Gerold Meisinger
quelle