So debuggen Sie Node.js-Code mit mehreren Tools

Veröffentlicht: 2022-03-15

Node.js ist eine JavaScript-Laufzeitumgebung, die auf derselben V8-Engine basiert, die auch im Chrome-Browser von Google verwendet wird. Es wird häufig verwendet, um plattformübergreifende serverseitige und Terminalanwendungen zu erstellen. Node.js ist in den letzten zehn Jahren immer beliebter geworden, weil es einfach zu installieren, praktisch zu verwenden und schnell ist und es clientseitigen Webentwicklern ermöglicht, ihre Fähigkeiten anderweitig einzusetzen.

Die Softwareentwicklung bleibt jedoch eine komplexe Aufgabe, und Ihr Node.js-Code wird irgendwann scheitern. Dieses Lernprogramm zeigt verschiedene Tools, mit denen Sie Anwendungen debuggen und die Ursache eines Problems finden können.

Lassen Sie uns gleich eintauchen.

Debugging-Übersicht

Als „Debugging“ werden die verschiedenen Mittel zur Behebung von Softwarefehlern bezeichnet. Das Beheben eines Fehlers ist oft einfach. Die Suche nach der Ursache des Fehlers kann erheblich komplexer sein und viele Stunden des Kopfkratzens erfordern.

In den folgenden Abschnitten werden drei allgemeine Fehlertypen beschrieben, auf die Sie stoßen werden.

Syntaxfehler

Ihr Code folgt nicht den Regeln der Sprache – zum Beispiel, wenn Sie eine schließende Klammer weglassen oder eine Anweisung wie console.lag(x) falsch schreiben.

Ein guter Code-Editor kann helfen, häufige Probleme zu erkennen, indem er:

  • Farbkodierung gültiger oder ungültiger Aussagen
  • Typprüfende Variablen
  • Automatische Vervollständigung von Funktions- und Variablennamen
  • Hervorheben passender Klammern
  • Automatisches Einrücken von Codeblöcken
  • Erkennen von nicht erreichbarem Code
  • Refactoring chaotischer Funktionen

Kostenlose Editoren wie VS Code und Atom bieten hervorragende Unterstützung für Node.js, JavaScript und TypeScript (das in JavaScript transpiliert). Grundlegende Syntaxprobleme können normalerweise erkannt werden, bevor Sie Ihren Code speichern und testen.

Ein Code-Linter wie ESLint meldet auch Syntaxfehler, fehlerhafte Einrückungen und nicht deklarierte Variablen. ESLint ist ein Node.js-Tool, mit dem Sie global installieren können:

 npm i eslint -g

Sie können JavaScript-Dateien von der Befehlszeile aus überprüfen mit:

 eslint mycode.js

…aber es ist einfacher, ein Editor-Plugin wie ESLint für VS Code oder linter-eslint für Atom zu verwenden, die den Code automatisch während der Eingabe validieren:

ESlint im VS-Code
ESlint im VS-Code.

Logikfehler

Ihr Code wird ausgeführt, funktioniert aber nicht wie erwartet. Beispielsweise wird ein Benutzer nicht abgemeldet, wenn er dies anfordert; ein Bericht zeigt falsche Zahlen; Daten werden nicht vollständig in einer Datenbank gespeichert; etc.

Logikfehler können verursacht werden durch:

  • Verwendung der falschen Variable
  • Falsche Bedingungen, z. B. if (a > 5) statt if (a < 5)
  • Berechnungen, die den Vorrang der Operatoren nicht berücksichtigen, z. B. 1+2*3 , ergeben 7 statt 9.

Es ist unvermeidlich: Ihr Node.js-Code wird irgendwann fehlschlagen. Sehen Sie hier, mit welchen Tools Sie Anwendungen debuggen und die Ursache eines Problems finden können Click to Tweet

Laufzeit- (oder Ausführungs-) Fehler

Ein Fehler wird erst beim Ausführen der Anwendung sichtbar, was häufig zu einem Absturz führt. Laufzeitfehler können verursacht werden durch:

  • Division durch eine auf Null gesetzte Variable
  • Versuch, auf ein nicht vorhandenes Array-Element zuzugreifen
  • Versuch, in eine schreibgeschützte Datei zu schreiben

Logik- und Laufzeitfehler sind schwieriger zu erkennen, obwohl die folgenden Entwicklungstechniken hilfreich sein können:

  1. Verwenden Sie testgetriebene Entwicklung: TTD ermutigt Sie, Tests zu schreiben, bevor eine Funktion entwickelt wird, z. B. wird X von FunktionY zurückgegeben, wenn Z als Parameter übergeben wird. Diese Tests werden während der anfänglichen Entwicklung und nachfolgenden Updates durchgeführt, um sicherzustellen, dass der Code weiterhin wie erwartet funktioniert.
  2. Verwenden Sie ein Problemverfolgungssystem: Es gibt nichts Schlimmeres als eine E-Mail mit der Behauptung „Ihre Software funktioniert nicht“ ! Problemverfolgungssysteme ermöglichen es Ihnen, bestimmte Probleme aufzuzeichnen, Reproduktionsschritte zu dokumentieren, Prioritäten festzulegen, Entwickler zuzuweisen und den Fortschritt von Fehlerbehebungen zu verfolgen.
  3. Verwenden Sie Quellcodeverwaltung: Ein Quellcodeverwaltungssystem wie Git hilft Ihnen, Code zu sichern, Revisionen zu verwalten und zu identifizieren, wo ein Fehler eingeführt wurde. Online-Repositories, einschließlich Github und Bitbucket, bieten kostenlosen Speicherplatz und Tools für kleinere oder Open-Source-Projekte.

Sie werden immer noch auf Node.js-Fehler stoßen, aber die folgenden Abschnitte beschreiben Möglichkeiten, diesen schwer fassbaren Fehler zu lokalisieren.

Legen Sie geeignete Node.js-Umgebungsvariablen fest

Im Hostbetriebssystem festgelegte Umgebungsvariablen können die Anwendungs- und Moduleinstellungen von Node.js steuern. Am gebräuchlichsten ist NODE_ENV , das normalerweise beim Debuggen auf Entwicklung oder beim Ausführen auf einem Live-Server auf Produktion eingestellt ist. Legen Sie Umgebungsvariablen unter macOS oder Linux mit dem Befehl fest:

 NODE_ENV=development

oder an der (klassischen) Windows-Eingabeaufforderung:

 set NODE_ENV=development

oder Windows-Powershell:

 $env:NODE_ENV="development"

Im beliebten Express.js-Framework deaktiviert das Festlegen von NODE_ENV auf Entwicklung das Zwischenspeichern von Vorlagendateien und gibt ausführliche Fehlermeldungen aus, die beim Debuggen hilfreich sein können. Andere Module bieten möglicherweise ähnliche Funktionen, und Sie können Ihren Anwendungen eine NODE_ENV-Bedingung hinzufügen, z

 // running in development mode? const devMode = (process.env.NODE_ENV !== 'production'); if (devMode) { console.log('application is running in development mode'); }

Sie können auch die util.debuglog-Methode von Node verwenden, um Fehlermeldungen bedingt auszugeben, z

 import { debuglog } from 'util'; const myappDebug = debuglog('myapp'); myappDebug('log something');

Diese Anwendung gibt die Protokollnachricht nur aus, wenn NODE_DEBUG auf myapp oder einen Platzhalter wie * oder my* gesetzt ist.

Verwenden Sie Node.js-Befehlszeilenoptionen

Node-Scripts werden normalerweise mit node gefolgt vom Namen des Entry-Scripts gestartet:

 node app.js

Sie können auch Befehlszeilenoptionen festlegen, um verschiedene Laufzeitaspekte zu steuern. Nützliche Flags zum Debuggen sind:

  • --check
    Syntaxprüfung des Skripts ohne Ausführung
  • --trace-warnings
    einen Stacktrace ausgeben, wenn JavaScript Promises nicht aufgelöst oder abgelehnt werden
  • --enable-source-maps
    Quellzuordnungen anzeigen, wenn ein Transpiler wie TypeScript verwendet wird
  • --throw-deprecation
    warnen, wenn veraltete Node.js-Funktionen verwendet werden
  • --redirect-warnings=file
    Ausgabe von Warnungen in eine Datei anstatt in stderr
  • --trace-exit
    einen Stack-Trace ausgeben, wenn process.exit() aufgerufen wird.

Nachrichten an die Konsole ausgeben

Die Ausgabe einer Konsolennachricht ist eine der einfachsten Möglichkeiten, eine Node.js-Anwendung zu debuggen:

 console.log(`someVariable: ${ someVariable }`);

Nur wenige Entwickler erkennen, dass es viele andere Konsolenmethoden gibt:

Konsolenmethode Beschreibung
.log(msg) Standard-Konsolennachricht
.log('%j', obj) Ausgabeobjekt als kompakten JSON-String
.dir(obj, opt) Pretty-Print-Objekteigenschaften
.table(obj) Ausgabe von Arrays und Objekten im Tabellenformat
.error(msg) eine Fehlermeldung
.count(label) Erhöhen Sie einen benannten Zähler und geben Sie ihn aus
.countReset(label) einen benannten Zähler zurücksetzen
.group(label) eine Gruppe von Nachrichten einrücken
.groupEnd(label) eine Gruppe beenden
.time(label) startet einen benannten Timer
.timeLog(label) meldet die verstrichene Zeit
.timeEnd(label) stoppt einen benannten Timer
.trace() Stack-Trace ausgeben (eine Liste aller getätigten Funktionsaufrufe)
.clear() Konsole löschen

console.log() akzeptiert auch eine Liste von kommagetrennten Werten:

 let x = 123; console.log('x:', x); // x: 123

…obwohl die ES6-Destrukturierung eine ähnliche Ausgabe mit weniger Aufwand bietet:

 console.log({ x }); // { x: 123 }

Der Befehl console.dir() druckt Objekteigenschaften auf die gleiche Weise wie util.inspect():

 console.dir(myObject, { depth: null, color: true });

Konsolenkontroverse

Einige Entwickler behaupten, Sie sollten niemals console.log() verwenden, weil:

  • Sie ändern Code und ändern möglicherweise etwas oder vergessen, ihn zu entfernen, und
  • Es besteht keine Notwendigkeit, wenn es bessere Debugging-Optionen gibt.

Glauben Sie niemandem, der behauptet, dass er nie console.log() verwendet! Protokollieren ist schnell und schmutzig, aber jeder benutzt es irgendwann. Verwenden Sie das Werkzeug oder die Technik, die Sie bevorzugen. Das Beheben eines Fehlers ist wichtiger als die Methode, mit der Sie ihn finden.

Verwenden Sie ein Protokollierungssystem eines Drittanbieters

Protokollierungssysteme von Drittanbietern bieten ausgefeiltere Funktionen wie Messaging-Ebenen, Ausführlichkeit, Sortierung, Dateiausgabe, Profilerstellung, Berichterstellung und mehr. Beliebte Lösungen sind Cabin, Loglevel, Morgan, Pino, Signale, Storyboard, Tracer und Winston.

Verwenden Sie den V8-Inspektor

Die V8-JavaScript-Engine stellt einen Debugging-Client bereit, den Sie in Node.js verwenden können. Starten Sie eine Anwendung mit node inspect, z

 node inspect app.js

Der Debugger hält in der ersten Zeile an und zeigt eine Eingabeaufforderung debug> an:

 $ node inspect .\mycode.js < Debugger listening on ws://127.0.0.1:9229/143e23fb < For help, see: https://nodejs.org/en/docs/inspector < ok < Debugger attached. < Break on start in mycode.js:1 > 1 const count = 10; 2 3 for (i = 0; i < counter; i++) { debug>

Geben Sie help ein, um eine Liste mit Befehlen anzuzeigen. Sie können durch die Anwendung gehen, indem Sie Folgendes eingeben:

  • cont oder c : Ausführung fortsetzen
  • next oder n : Führt den nächsten Befehl aus
  • step oder s : Step in eine aufgerufene Funktion
  • out oder o : eine Funktion verlassen und zur aufrufenden Anweisung zurückkehren
  • pause : laufenden Code anhalten
  • watch('myvar') : Beobachte eine Variable
  • setBreakPoint() oder sb() : setze einen Haltepunkt
  • Neustart : Starten Sie das Skript neu
  • .exit oder Strg | Cmd + D : Beenden Sie den Debugger

Zugegeben, diese Debugging-Möglichkeit ist zeitaufwändig und unhandlich. Verwenden Sie es nur, wenn es keine andere Option gibt, z. B. wenn Sie Code auf einem Remote-Server ausführen und keine Verbindung von anderswo herstellen oder zusätzliche Software installieren können.

Verwenden Sie den Chrome-Browser, um Node.js-Code zu debuggen

Die oben verwendete Node.js-Inspect-Option startet einen Web-Socket-Server, der auf localhost-Port 9229 lauscht. Sie startet auch einen textbasierten Debugging-Client, aber es ist möglich, grafische Clients zu verwenden – wie den in Google Chrome integrierten und Chrome-basierten Browser wie Chromium, Edge, Opera, Vivaldi und Brave.

Um eine typische Webanwendung zu debuggen, starten Sie sie mit der Option –inspect, um den Web-Socket-Server des V8-Debuggers zu aktivieren:

 node --inspect index.js

Notiz:

  • Es wird angenommen, dass index.js das Einstiegsskript der Anwendung ist.
  • Stellen Sie sicher, dass Sie --inspect mit doppelten Bindestrichen verwenden, um sicherzustellen, dass Sie den textbasierten Debugger-Client nicht starten.
  • Sie können nodemon anstelle von node verwenden, wenn Sie die Anwendung automatisch neu starten möchten, wenn eine Datei geändert wird.

Standardmäßig akzeptiert der Debugger nur eingehende Verbindungen vom lokalen Computer. Wenn Sie die Anwendung auf einem anderen Gerät, einer anderen virtuellen Maschine oder einem anderen Docker-Container ausführen, verwenden Sie Folgendes:

 node --inspect=0.0.0.0:9229 index.js
Knoten inspizieren
Knotenprüfungsoption.

Sie können auch --inspect-brk anstelle von --inspect , um die Verarbeitung in der ersten Zeile anzuhalten (einen Haltepunkt zu setzen), damit Sie den Code von Anfang an durchlaufen können.

Öffnen Sie einen Chrome-basierten Browser und geben chrome://inspect in die Adressleiste ein, um lokale und vernetzte Geräte anzuzeigen:

Chrome-Inspektionstool
Chrome-Inspektionstool.

Wenn Ihre Node.js-Anwendung nicht als Remote Target angezeigt wird:

  • Klicken Sie auf Dedizierte DevTools für Knoten öffnen, und wählen Sie die Adresse und den Port aus, oder
  • Aktivieren Sie Netzwerkziele erkennen , klicken Sie auf Konfigurieren und fügen Sie dann die IP-Adresse und den Port des Geräts hinzu, auf dem es ausgeführt wird.

Klicken Sie auf den Link „Inspect“ des Ziels, um den DevTools -Debuggerclient zu starten. Dies sollte jedem bekannt sein, der DevTools für das Debuggen von clientseitigem Code verwendet hat:

Chrome-Entwicklungstools
Chrome-Entwicklungstools.

Wechseln Sie zum Bereich „ Quellen “. Sie können jede Datei öffnen, indem Sie Cmd | drücken Strg + P und Eingabe des Dateinamens (z. B. index.js).

Es ist jedoch einfacher, Ihren Projektordner zum Arbeitsbereich hinzuzufügen. Auf diese Weise können Sie Dateien direkt aus DevTools laden, bearbeiten und speichern (ob Sie das für eine gute Idee halten, steht auf einem anderen Blatt!).

  1. Klicken Sie auf + Ordner zum Arbeitsbereich hinzufügen
  2. Wählen Sie den Speicherort Ihres Node.js-Projekts aus
  3. Klicken Sie auf Zustimmen , um Dateiänderungen zuzulassen

Sie können nun Dateien aus dem linken Verzeichnisbaum laden:

Chrome DevTools Sources Panel
Chrome DevTools Sources Panel.

Klicken Sie auf eine beliebige Zeilennummer, um einen Haltepunkt festzulegen, der durch eine blaue Markierung gekennzeichnet ist.

Das Debuggen basiert auf Breakpoints . Diese geben an, wo der Debugger die Programmausführung anhalten soll und zeigen den aktuellen Zustand des Programms (Variablen, Call-Stack usw.)

Sie können beliebig viele Breakpoints in der Benutzeroberfläche definieren. Eine andere Möglichkeit besteht darin, einen Debugger zu platzieren; -Anweisung in Ihren Code, die stoppt, wenn ein Debugger angehängt wird.

Laden und verwenden Sie Ihre Webanwendung, um die Anweisung zu erreichen, in der ein Haltepunkt gesetzt ist. Im Beispiel hier wird http://localhost:3000/ in einem beliebigen Browser geöffnet, und DevTools hält die Ausführung in Zeile 44 an:

Chrome-Haltepunkt
Chrome-Haltepunkt.

Das rechte Panel zeigt:

Kämpfen Sie mit Ausfallzeiten und WordPress-Problemen? Kinsta ist die Hosting-Lösung, die entwickelt wurde, um dir Zeit zu sparen! Schauen Sie sich unsere Funktionen an
  • Eine Reihe von Aktionssymbolen (siehe unten).
  • In einem Überwachungsbereich können Sie Variablen überwachen, indem Sie auf das Symbol + klicken und ihre Namen eingeben.
  • Ein Breakpoints -Bereich zeigt eine Liste aller Breakpoints und ermöglicht deren Aktivierung oder Deaktivierung.
  • Ein Bereichsbereich zeigt den Status aller lokalen, Modul- und globalen Variablen. Sie werden diesen Bereich am häufigsten untersuchen.
  • Ein Aufrufstapelbereich zeigt die Hierarchie der Funktionen, die aufgerufen werden, um diesen Punkt zu erreichen.

Eine Reihe von Aktionssymbolen wird über Angehalten am Haltepunkt angezeigt :

Chrome-Breakpoint-Symbole
Chrome-Breakpoint-Symbole.

Von links nach rechts führen diese die folgenden Aktionen aus:

  • Ausführung fortsetzen : Die Verarbeitung wird bis zum nächsten Haltepunkt fortgesetzt
  • step over : Führt den nächsten Befehl aus, bleibt aber im aktuellen Codeblock – springt nicht in eine Funktion, die er aufruft
  • step into : Führt den nächsten Befehl aus und springt bei Bedarf in eine beliebige Funktion
  • step out : Setzt die Verarbeitung bis zum Ende der Funktion fort und kehrt zum aufrufenden Befehl zurück
  • step : Ähnlich wie step into , außer dass es nicht in asynchrone Funktionen springt
  • alle Haltepunkte deaktivieren
  • Pause bei Ausnahmen : Hält die Verarbeitung an, wenn ein Fehler auftritt.

Bedingte Haltepunkte

Manchmal ist es notwendig, ein wenig mehr Kontrolle über Breakpoints auszuüben. Stellen Sie sich vor, Sie haben eine Schleife, die 1.000 Iterationen abgeschlossen hat, aber Sie interessieren sich nur für den Zustand der letzten:

 for (let i = 0; i < 1000; i++) { // set breakpoint here }

Anstatt 999 Mal auf Ausführung fortsetzen zu klicken, können Sie mit der rechten Maustaste auf die Zeile klicken, Bedingten Haltepunkt hinzufügen auswählen und eine Bedingung wie i = 999 eingeben:

Bedingter Chrome-Haltepunkt
Bedingter Chrome-Haltepunkt.

Chrome zeigt bedingte Haltepunkte eher in Gelb als in Blau an. In diesem Fall wird der Haltepunkt nur bei der letzten Iteration der Schleife ausgelöst.

Protokollpunkte

Protokollpunkte implementieren console.log() effektiv ohne Code! Ein Ausdruck kann ausgegeben werden, wenn der Code eine beliebige Zeile ausführt, aber er hält die Verarbeitung nicht an, im Gegensatz zu einem Haltepunkt.

Um einen Protokollpunkt hinzuzufügen, klicken Sie mit der rechten Maustaste auf eine beliebige Zeile, wählen Sie Protokollpunkt hinzufügen und geben Sie einen Ausdruck ein, z. B. 'loop counter i', i :

Chrome-Logpoint
Chrome-Protokollpunkt.

Die DevTools-Konsole gibt loop counter i: 0 bis loop counter i: 999 im obigen Beispiel aus.

Verwenden Sie VS Code zum Debuggen von Node.js-Anwendungen

VS Code oder Visual Studio Code ist ein kostenloser Code-Editor von Microsoft, der bei Webentwicklern beliebt geworden ist. Die Anwendung ist für Windows, macOS und Linux verfügbar und wird mithilfe von Webtechnologien im Electron-Framework entwickelt.

VS Code unterstützt Node.js und verfügt über einen integrierten Debugging-Client. Die meisten Anwendungen können ohne Konfiguration debuggt werden; Der Editor startet automatisch den Debugging-Server und -Client.

Öffnen Sie die Startdatei (z. B. index.js), aktivieren Sie den Bereich Ausführen und Debuggen , klicken Sie auf die Schaltfläche Ausführen und Debuggen und wählen Sie die Umgebung Node.js aus. Klicken Sie auf eine beliebige Zeile, um einen Haltepunkt zu aktivieren, der als rotes Kreissymbol angezeigt wird. Öffnen Sie dann die Anwendung wie zuvor in einem Browser – VS Code hält die Ausführung an, wenn der Haltepunkt erreicht ist:

VS-Code-Haltepunkt
VS-Code-Haltepunkt.

Die Bereiche Variables , Watch , Call Stack und Breakpoints ähneln denen in Chrome DevTools. Der Bereich „ Geladene Skripts “ zeigt, welche Skripts geladen wurden, obwohl viele intern in Node.js sind.

Die Symbolleiste der Aktionssymbole ermöglicht Ihnen Folgendes:

  • Ausführung fortsetzen : Die Verarbeitung wird bis zum nächsten Haltepunkt fortgesetzt
  • step over : Führt den nächsten Befehl aus, bleibt aber in der aktuellen Funktion – springt nicht in eine Funktion, die sie aufruft
  • step into : Führt den nächsten Befehl aus und springt in jede Funktion, die er aufruft
  • step out : Setzt die Verarbeitung bis zum Ende der Funktion fort und kehrt zum aufrufenden Befehl zurück
  • Starten Sie die Anwendung und den Debugger neu
  • Stoppen Sie die Anwendung und den Debugger

Wie bei Chrome DevTools können Sie mit der rechten Maustaste auf eine beliebige Zeile klicken, um bedingte Haltepunkte und Protokollpunkte hinzuzufügen.

Weitere Informationen finden Sie unter Debuggen in Visual Studio Code.

VS Code Advanced Debugging-Konfiguration

Eine weitere VS Code-Konfiguration kann erforderlich sein, wenn Sie Code auf einem anderen Gerät oder einer virtuellen Maschine debuggen möchten oder alternative Startoptionen wie nodemon verwenden müssen.

VS Code speichert Debugging-Konfigurationen in einer launch.json-Datei in einem .vscode Verzeichnis in Ihrem Projekt. Öffnen Sie den Bereich Ausführen und Debuggen, klicken Sie auf create a launch.json file und wählen Sie die Node.js -Umgebung aus, um diese Datei zu generieren. Eine Beispielkonfiguration wird bereitgestellt:

Konfiguration des VS Code-Debuggers
Konfiguration des VS Code-Debuggers.

Im Array "configurations" können beliebig viele Konfigurationseinstellungen als Objekte definiert werden. Klicken Sie auf Konfiguration hinzufügen… und wählen Sie eine geeignete Option aus.

Eine einzelne Node.js-Konfiguration kann entweder:

  1. Starten Sie einen Prozess selbst, oder
  2. Verbinden Sie sich mit einem Debugging-Web-Socket-Server, der möglicherweise auf einem Remote-Computer oder Docker-Container ausgeführt wird.

Um beispielsweise eine Nodemon-Konfiguration zu definieren, wählen Sie Node.js: Nodemon Setup und ändern Sie bei Bedarf das Eintragsskript „Programm“:

 { // custom configuration "version": "0.2.0", "configurations": [ { "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "name": "nodemon", "program": "${workspaceFolder}/index.js", "request": "launch", "restart": true, "runtimeExecutable": "nodemon", "skipFiles": [ "<node_internals>/**" ], "type": "pwa-node" } ] }

Speichern Sie die Datei launch.json und nodemon (der „Name“ der Konfiguration) wird in der Dropdown-Liste oben im Bereich „Ausführen und Debuggen“ angezeigt. Klicken Sie auf das grüne Ausführungssymbol, um mit der Verwendung dieser Konfiguration zu beginnen, und starten Sie die Anwendung mit nodemon:

VS-Code-Debugging mit nodemon
VS-Code-Debugging mit nodemon.

Wie zuvor können Sie Haltepunkte, bedingte Haltepunkte und Protokollpunkte hinzufügen. Der Hauptunterschied besteht darin, dass nodemon Ihren Server automatisch neu startet, wenn eine Datei geändert wird.

Weitere Informationen finden Sie unter VS Code Launch-Konfigurationen.

Die folgenden VS Code-Erweiterungen können Ihnen auch beim Debuggen von Code helfen, der auf Remote- oder isolierten Serverumgebungen gehostet wird:

  • Remote – Container: Stellen Sie eine Verbindung zu Apps her, die in Docker-Containern ausgeführt werden
  • Remote – SSH: Verbinden Sie sich mit Apps, die auf einem Remote-Server ausgeführt werden
  • Remote – WSL: Stellen Sie eine Verbindung zu Apps her, die auf dem Windows-Subsystem für Linux (WSL) ausgeführt werden.

Andere Debugging-Optionen von Node.js

Der Node.js Debugging Guide bietet Ratschläge für eine Reihe von Texteditoren und IDEs, darunter Visual Studio, JetBrains WebStorm, Gitpod und Eclipse. Atom bietet eine Node-Debug-Erweiterung an, die den Chrome DevTools-Debugger in den Editor integriert.

Sobald Ihre Anwendung live ist, können Sie kommerzielle Debugging-Dienste wie LogRocket und Sentry.io verwenden, die Client- und Serverfehler aufzeichnen und wiedergeben können, auf die echte Benutzer stoßen.

Benötigen Sie Hilfe beim Debuggen von Anwendungen? Beginnen Sie hier Klicken Sie, um zu twittern

Zusammenfassung

In der Vergangenheit war das Debuggen von JavaScript schwierig, aber in den letzten zehn Jahren wurden enorme Verbesserungen erzielt. Die Auswahl ist genauso gut – wenn nicht sogar besser – als bei anderen Sprachen.

Verwenden Sie ein beliebiges Werkzeug, um ein Problem zu lokalisieren. Es ist nichts falsch an console.log() für die schnelle Fehlersuche, aber Chrome DevTools oder VS Code können für komplexere Probleme vorzuziehen sein. Die Tools können Ihnen dabei helfen, robusteren Code zu erstellen, und Sie verbringen weniger Zeit mit der Behebung von Fehlern.

Auf welche Debugging-Praxis von Node.js schwören Sie? Teilen Sie im Kommentarbereich unten!