Debuggen mit dem in Node.js integrierten Debugger

Abgeschlossen

Das Debuggen ist eine mehrstufige Anwendung, die normalerweise die folgenden Schritte umfasst:

  1. Identifizieren von Fehlern im Programm
  2. Suchen nach der Position des Fehlers im Code
  3. Analysieren der Ursache des Fehlers
  4. Beheben des Fehlers
  5. Überprüfen, ob die Korrektur erfolgreich ist

Nachdem Sie einen Fehler in Ihrem Node.js-Programm identifiziert haben, besteht die erste Herausforderung darin, zu ermitteln, wo sich der Fehler im Code befindet. Eine der effizientesten Methoden, dies zu erreichen, ist, den Code Schritt für Schritt auszuführen, um eine Vorstellung davon zu bekommen, wo etwas schief läuft.

Breakpoints

Den gesamten Code in Einzelschritten zu durchlaufen, kann äußerst ineffizient sein, wenn Ihr Programm Tausende von Codezeilen enthält. In diesem Fall können Sie einen Haltepunkt setzen. Damit können Sie die normale Ausführung Ihres Programms unterbrechen und an einer bestimmten Stelle im Code anhalten.

Mithilfe von Haltepunkten können Sie das Programm ordnungsgemäß ausführen, bis der kritische Codeabschnitt erreicht wird, in dem Sie den Fehler vermuten. Anschließend kann der Code in Einzelschritten ausgeführt werden.

Abhängig vom Debugger und Code-Editor gibt es mehrere Möglichkeiten zum Definieren von Haltepunkten im Code.

Node.js-Überprüfungsmodus

Da ein Debugger vollständigen Zugriff auf die Ausführungsumgebung hat, könnte ein böswilliger Akteur ihn ebenfalls verwenden, um beliebigen Code in Ihre Node.js-Anwendung einzuschleusen. Aus diesem Grund ist es in Node.js standardmäßig nicht möglich, ein laufendes Programm zu debuggen. Sie müssen einen speziellen Modus namens Überprüfungsmodus aktivieren, um das Debuggen zu ermöglichen.

Sie müssen Ihre Anwendung mit der --inspect-Option starten, damit ein Debugger-Client sich an die Anwendung anfügen und die Kontrolle über die Ausführung Ihrer Anwendung übernehmen kann.

Wenn Node.js mit der Option --inspect gestartet wird, wird standardmäßig auf dem Host 127.0.0.1 am Port 9229 gelauscht. Mithilfe der Syntax --inspect=<HOST>:<PORT> können Sie jedoch auch einen benutzerdefinierten Host und Port angeben.

Wichtig

Der Node.js-Debuggerport sollte nie an eine öffentliche IP-Adresse oder an 0.0.0.0 gebunden werden. Andernfalls sind alle Clients, die eine Verbindung mit Ihrer IP-Adresse herstellen können, möglicherweise in der Lage, eine Verbindung mit Ihrer Node.js-Anwendung herzustellen und diese zu steuern. Auf diese Weise kann ein Angreifer beliebigen Code in Ihrer Ausführungsumgebung remote ausführen. Diese Aktion kann zu einer schwerwiegenden Sicherheitsverletzung führen.

Alternativ können Sie die Option --inspect-brk verwenden. Sie funktioniert wie --inspect, die Codeausführung wird jedoch direkt vor dem Start Ihres Codes unterbrochen. Auf diese Weise können Sie den Debugger anfügen und sich Zeit nehmen, Breakpoints festzulegen und den Code schrittweise zu durchlaufen, um die Grundursache des Problems zu ermitteln. Verwenden Sie diesen --inspect-brk-Schalter, wenn Sie debuggen müssen:

  • Eine Racebedingung.
  • Zeitweiliges Problem, das schwer zu reproduzieren ist.

Nachdem Ihre Anwendung mit aktiviertem Überprüfungsmodus gestartet wurde, können Sie alle kompatiblen Debuggerclients verwenden, um eine Verbindung mit Ihrem Anwendungsprozess herzustellen.

Debuggerclients

Um Ihre Anwendung zu debuggen, müssen Sie einen Debuggerclient verwenden. Ein Debuggerclient ist ein Programm, das eine Verbindung mit Ihrer Node.js-Anwendung herstellt und Ihnen die Steuerung ihrer Ausführung ermöglicht. Es sind viele Debuggerclients verfügbar, aber die häufigsten sind:

  • Visual Studio Code: Ein grafischer Debuggerclient, der im Bündel mit Visual Studio Code geliefert wird. Verwenden Sie diesen beim Debuggen während der Entwicklung.
  • node-inspect: Ein Debuggerclient auf der Befehlszeile, der im Bündel mit Node.js geliefert wird. Verwenden Sie diesen beim Debuggen in der Produktion.

Integrierter Debugger

Sie können node-inspect, den Befehlszeilen-Debuggerclient verwenden, der im Bündel mit Node.js geliefert wird, um Ihre Node.js-Anwendung zu debuggen. Es ist ein einfacher Debugger, mit dem Sie Haltepunkte festlegen und Ihren Code Schritt für Schritt ausführen können.

node inspect <YOUR_SCRIPT>.js

Der Debugger „node-inspect“ führt Node.js mit aktiviertem Überprüfungsmodus aus und wird zusammen mit dem integrierten interaktiven Debugger gestartet. Dieser Debugger hält die Ausführung unmittelbar vor Beginn Ihres Codes an. Ihnen sollte eine Debuggeraufforderung angezeigt werden, die Sie über den erfolgreichen Start informiert:

node inspect myscript.js
< Debugger listening on ws://127.0.0.1:9229/ce3689fa-4433-41ee-9d5d-98b5bc5dfa27
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in myscript.js:1
> 1 const express = require('express');
  2
  3 const app = express();
debug>