Déboguer avec le débogueur intégré Node.js

Effectué

Le débogage est un processus en plusieurs phases qui suit généralement ces étapes :

  1. Identifier un bogue dans votre programme.
  2. Rechercher l’endroit où le bogue se trouve dans votre code.
  3. Analyser la raison pour laquelle le bogue se produit.
  4. Corriger le bogue.
  5. Vérifier que votre correctif fonctionne.

Une fois que vous avez identifié une erreur dans votre programme Node.js, le premier défi auquel vous êtes confronté est de rechercher où se trouve l’erreur dans votre code. Pour cela, une des méthodes les plus efficaces consiste à exécuter votre code pas à pas pour avoir une idée de l’endroit où les choses commencent à aller mal.

Points d’arrêt

Cependant, l’exécution pas à pas de tout votre code peut être extrêmement inefficace si votre programme contient des milliers de lignes de code. Dans ce cas, vous pouvez utiliser un point d’arrêt. Il vous permet d’arrêter l’exécution normale de votre programme et de le mettre en suspens à un point spécifique dans votre code.

Avec des points d’arrêt, vous pouvez faire en sorte que votre programme s’exécute normalement jusqu’à atteindre la partie critique du code où vous soupçonnez que l’erreur se trouve. Vous pouvez passer alors à l’exécution pas à pas.

Il y a plusieurs façons de définir des points d’arrêt dans votre code en fonction de votre débogueur et de votre éditeur de code.

Mode d’inspection Node.js

Comme un débogueur a un accès complet à l’environnement d’exécution, un acteur malveillant pourrait aussi l’utiliser pour injecter du code arbitraire dans votre application Node.js. C’est la raison pour laquelle, par défaut, Node.js ne vous permet pas de déboguer un programme en cours d’exécution. Vous devez activer un mode spécial appelé inspecteur pour autoriser le débogage.

Vous devez démarrer votre application avec l’option --inspect pour permettre à un client de débogueur de s’attacher à l’application et de prendre le contrôle de l’exécution de votre application.

Par défaut, quand Node.js est démarré avec l’option --inspect, il écoute sur l’hôte 127.0.0.1, sur le port 9229. Vous pouvez également spécifier un hôte et un port personnalisés en utilisant la syntaxe --inspect=<HOST>:<PORT>.

Important

Évitez de lier le port du débogueur Node.js à une adresse IP publique ou à 0.0.0.0. Sinon, les clients qui peuvent se connecter à votre adresse IP pourraient potentiellement se connecter à votre application Node.js et en prendre le contrôle. Si vous faites cela, un attaquant peut exécuter à distance du code arbitraire sur votre environnement d’exécution. Cette action peut aboutir à une violation grave de la sécurité.

Vous pouvez également utiliser l’option --inspect-brk. Elle fonctionne de la même façon que --inspect, mais elle interrompt l’exécution du code juste avant le début de votre code. Cela vous permet d’attacher le débogueur et de prendre du temps pour définir des points d’arrêt et parcourir votre code pour identifier la cause racine du problème. Utilisez ce commutateur --inspect-brk quand vous devez déboguer :

  • Une condition de concurrence.
  • Un problème intermittent difficile à reproduire.

Une fois que votre application est démarrée avec le mode inspection activé, vous pouvez utiliser n’importe quel client de débogueur compatible pour vous connecter au processus de votre application.

Clients de débogueur

Pour déboguer votre application, vous devez utiliser un client de débogueur. Un client de débogueur est un programme qui se connecte à votre application Node.js et vous permet de contrôler son exécution. De nombreux clients de débogueur sont disponibles, mais les plus courants sont les suivants :

  • Visual Studio Code : Un client de débogueur graphique fourni avec Visual Studio Code. Utilisez-le lors du débogage en phase de développement.
  • node-inspect : Un débogueur en ligne de commande qui est fourni avec Node.js. Utilisez-le lors du débogage en production.

Débogueur intégré

Vous pouvez utiliser le client de débogueur en ligne de commande node-inspect, qui est fourni avec Node.js, pour déboguer votre application Node.js. C’est un débogueur simple qui vous permet de définir des points d’arrêt et d’exécuter votre code pas à pas.

node inspect <YOUR_SCRIPT>.js

Le débogueur node-inspect exécute Node.js avec le mode inspection activé et se lance en même temps que le débogueur interactif intégré. Il interrompt l’exécution juste avant le démarrage de votre code. Vous devez voir apparaître l’invite du débogueur qui indique qu’il a été lancé.

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>