javascript - statement - nodejs remote debug




Wie debugge ich Node.js-Anwendungen? (20)

Wie debugge ich eine Node.js-Serveranwendung?

Im Moment benutze ich meistens das Debugging mit print-Anweisungen wie folgt:

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

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


Knoten hat seinen eigenen eingebauten GUI-Debugger ab Version 6.3 (mit den DevTools von Chrome)

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

node --inspect server.js

Sie können auch in der ersten Zeile brechen, indem --inspect-brk stattdessen --inspect-brk .

Verwenden Sie das inspect-process Modul, um ein Chrome-Fenster automatisch zu öffnen.

# install inspect-process globally
npm install -g inspect-process

# start the debugger with inspect
inspect script.js

Debuggen

Profilerstellung

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

Heapdumps

Flammengraphen

Ablaufverfolgung

Protokollierung

Bibliotheken, die Debuginformationen ausgeben

Bibliotheken, die Stack-Trace-Informationen verbessern

Benchmarking

Andere

Erbe

Diese funktionieren, werden aber nicht mehr gepflegt oder sind für moderne Knotenversionen nicht mehr anwendbar.




Eine schnelle Möglichkeit, kleine Node.js-Skripte mit Ihrem bevorzugten Browser-Debugger zu debuggen, wäre die Verwendung von browserify . Beachten Sie, dass dieser Ansatz bei Anwendungen, die native E / A-Bibliotheken erfordern, nicht funktioniert, aber für die meisten kleinen Skripts ausreichend ist.

$ npm install -g browserify

Verschieben Sie nun alle Ihre var x = requires('x') in eine requires.js Datei und führen Sie folgendes aus:

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

(Der Nachteil hier ist, dass Sie entweder die requires in allen Ihren Dateien verschieben oder kommentieren requires .)

bundle.js die bundle.js wie bundle.js 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 F12 und Viola: debuggen im Browser.



Ich habe ein pry.js kleines Tool namens pry.js , das Ihnen helfen kann.

Setzen Sie eine einfache Anweisung irgendwo in Ihren Code, führen Sie Ihr Skript normal aus und der Knoten hält den aktuellen Thread an, der Ihnen Zugriff auf all Ihre Variablen und Funktionen gibt. Anzeigen / bearbeiten / löschen sie nach Belieben!

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()

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

Ein plattformübergreifender Open-Source-Debugger.

Installation:

npm install iron-node -g;

Debuggen:

iron-node yourscript.js;


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

Es funktioniert auf mehreren Betriebssystemen und hat Node.js Debugging eingebaut (sowie eine Menge anderer Sachen) ( http://www.jetbrains.com/webstorm/features/index.html ).

Meine einzigen 'Probleme' / Wunschliste Artikel sind waren :

  1. Es scheint auf Mac Ressourcenhungriger zu sein als Windows In Version 6 scheint das kein Problem mehr zu sein.
  2. Es wäre schön, wenn es Snippet-Unterstützung hätte (wie die von Sublime Text 2 - sprich "Fun" und tippe auf "Tab", um eine Funktion hinzuzufügen. Siehe @WickyNilliams Kommentar unten - Mit Live Templates haben Sie auch Snippet Unterstützung.

Ich würde GOOD von Walmart Labs benutzen. Es wird den Job machen, und es ist sehr flexibel:

var hapi = require('hapi');
var good = require('good');
var server = hapi.createServer('localhost', 5000,{});
server.route({SOME ROUTE HERE});
server.start();

var options = {
subscribers: {
    'console':               ['ops', 'request', 'log', 'error'],
    'http://localhost/logs': ['log']
    }
};
server.pack.require('good', options, function (err) {

    if (!err) {
        console.log('Plugin loaded successfully');
    }
});



Verwenden Sie diese Befehle

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect

Viele gute Antworten hier, aber ich möchte meine Meinung hinzufügen (basierend auf meiner Entwicklung)

Debug-Protokolle

Let's face it, wir alle lieben eine gute console.log('Uh oh, if you reached here, you better run.') Und manchmal, das funktioniert gut, so wenn Sie zurückhaltend sind, zu weit weg davon zumindest zu entfernen einige Bling zu Ihren Protokollen mit dem Debugging von Visionmedia .

Interaktives Debugging

So praktisch wie die Konsolenprotokollierung sein kann: Um professionell zu debuggen, müssen Sie die Ärmel hochkrempeln und stecken bleiben. Setzen Sie Haltepunkte, gehen Sie durch Ihren Code, untersuchen Sie Bereiche und Variablen, um zu sehen, was dieses komische Verhalten verursacht. Wie andere schon erwähnt haben, ist node-inspector wirklich die Bienen-Knie. Es bietet alles, was Sie mit dem integrierten Debugger tun können, aber mit der vertrauten Chrome DevTools-Oberfläche. Wenn Sie wie ich Webstorm verwenden , finden Sie here eine praktische Anleitung zum Debuggen von dort.

Stapel Spuren

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

Speicherlecks

Mit Node.js können wir erwarten, dass ein Serverprozess lange Zeit aufhält. Was machst du, wenn du denkst, dass es zu ekligen Lecks gekommen ist? Verwenden Sie heapdump und Chrome DevTools, um einige Snapshots zu vergleichen und zu sehen, was sich ändert.

Für einige nützliche Artikel, überprüfen Sie

Wenn Sie Lust haben, ein Video (s) zu sehen, dann

Unabhängig davon, welchen Pfad Sie wählen, stellen Sie sicher, dass Sie verstehen, wie Sie debuggen

Es ist eine schmerzhafte Sache
Um deine eigenen Probleme zu sehen und zu wissen
Dass du selbst und niemand sonst es geschafft hast

Sophokles, Ajax


Wenn Sie eine leistungsfähige Protokollbibliothek für Node.js benötigen, ist Tracer eine bessere Wahl.

Es gibt Protokollmeldungen mit Zeitstempel, Dateiname, Methodenname, Zeilennummer, Pfad oder Aufruf-Stack, Support-Farbkonsole aus und unterstützt Datenbank-, Datei- und Stream-Transport problemlos. Ich bin der Autor.


node-inspector könnte den Tag retten! Verwenden Sie es von jedem Browser, der WebSocket unterstützt. Breakpoints, Profiler, Livecoding, etc ... Es ist wirklich großartig.

Installieren Sie es mit:

npm install -g node-inspector

Dann renne:

node-debug app.js

Visual Studio Code unterstützt die Unterstützung von Node.js. Es ist kostenlos, quelloffen und plattformübergreifend und läuft unter Linux, OS X und Windows.

Sie können sogar Grunt- und Schluck-Aufgaben debuggen, sollten Sie ...


Brackets ist ein Projekt von Adobe Research, mit dem Sie Ihren Node.js Code in ihren Open Source Editor Brackets debuggen können. Es hat einige interessante Funktionen wie Echtzeit-Code-Abdeckung, rückwirkende Inspektion, asynchrone Aufruf-Struktur.


IntelliJ funktioniert wunderbar für Node.js.

Außerdem unterstützt IntelliJ "Code Assistance" gut.


Visual Studio Code ist meine Wahl zum Debuggen. Kein Aufwand für die Installation von Tools oder npm install Zeug. Legen Sie einfach den Startpunkt Ihrer App in package.json fest, und VSCode erstellt automatisch eine Konfigurationsdatei in Ihrer Lösung. Es basiert auf Electron , auf dem Editoren wie Atom gebaut werden.

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





google-chrome-devtools