Quels sont les meilleurs outils pour debugger du NodeJS ?
Si vous vous arrêtez sur cet article, vous êtes probablement un développeur curieux qui code peut-être en NodeJS. C’est une excellente nouvelle pour deux raisons.
La première c’est que dans cet article, je vais passer en revue avec vous les moyens les plus efficaces pour d’abord réduire les bugs et les traquer de la manière la plus efficace possible, en utilisant les bons outils.
La seconde raison, c'est qu'en tant que développeur NodeJS, vous avez l'embarras du choix en termes de job puisque ça recrute à tout va dans votre secteur. Et ça, c'est cool, car ça vous donne beaucoup plus d'opportunités de changement, d'évolution de carrière, d'augmentation de salaire et surtout l'occasion de participer à de nouveaux projets passionnants avec ou sans télétravail. Ainsi, **[la façon la plus simple de trouver votre prochain job de développeur NodeJS est probablement de vous inscrire sur talent.io](https://www.talent.io/p/fr-fr/candidates/perm?utm_source=korben&utm_medium=partnership&utm_campaign=nodejs_article)** pour recevoir des offres sur-mesure qui vous correspondent.Ceci étant dit, la plupart des développeurs détestent le debugging. En effet, coder c'est relativement simple, mais maintenir la qualité d'une application en y débusquant les problèmes et en les corrigeant est souvent générateur de nuits blanches. Il y a tellement de paramètres qui entrent en jeu, que ce qui fera la différence c'est votre expérience en debugging et votre méthode.En attendant d’acquérir les deux avec votre travail, on peut quand même se soulager un peu en utilisant des outils dédiés à cela qui rendront la localisation de bugs moins pénibles que de caler des console.log partout dans votre code.
Éviter les bugs
Le principe numéro 1 pour ne pas passer trop de temps sur cette tâche fastidieuse, c’est déjà d’éviter de créer des bugs. Je vous le dis tout de suite, c’est mission impossible, mais avec quelques bonnes pratiques vous pouvez quand même réduire leur quantité.
Premier conseil, utilisez un bon éditeur de code qui offre de nombreuses fonctionnalités, comme la numérotation des lignes, le formatage du code, l’autocomplétion, la détection des parenthèses et autres accolades manquantes, la coloration syntaxique, l’auto-indentation…etc. Plein de petites choses qui vous feront gagner du temps et vous éviteront les bourdes. En termes d’éditeur, en ce moment, c’est quand même Visual Studio Code qui rafle la palme.
Utiliser un linter comme ESLint, JSLint et JSHint est également un bon garde-fou. Le “linting” consiste à faire vérifier automatiquement notre code (dans sa version statique) afin d’y détecter toutes les erreurs de syntaxe et de programmation. C’est un peu la phase avant le debugging qui lui intervient sur du code “vivant” (exécuté ou interprété). Ainsi le linter est capable de détecter les variables que vous avez oublié de déclarer ou que vous avez déclarées en double, celles que vous n’utilisez pas, les libs que vous n’appelez pas, ou encore les mauvaises pratiques d’écriture de code. Pour résumer, un linter vous permet d’éviter de coder comme un cochon.
Mettre en place un outil de versioning pour votre code est également indispensable. Un système comme Git vous permettra de localiser plus facilement un nouveau bug en observant les dernières modifications effectuées sur le code. Un gain de temps formidable. Couplé avec un tracker de bugs type Bugzilla ou Trac, vous pourrez référencer tous les bugs remontés pour y revenir plus tard et avoir un suivi. C’est indispensable si vous travaillez en équipe, mais également si vous bossez tout seul.
Enfin, utiliser une méthodologie de développement piloté par les tests (Test-Driven Development) vous permettra d’avancer petit à petit en testant systématiquement la moindre fonction. Cela réduit considérablement les risques de bugs et permet de repérer plus rapidement les problèmes en cas de modification.
## Activer le mode DEVQuand vous déboguez votre application Node.js, l’environnement par défaut est le mode “développement” qui donne plus d’informations sur les bugs. Pour définir cela, vous devez initialiser la variable d’environnement NODE_ENV pour que sa valeur soit également à “development”.
Définissez la variable d’environnement node en mode développement sur Mac/Linux.
NODE_ENV=development
Sous Windows, utilisez la commande suivante.
set NODE_ENV=development
Pour afficher la valeur, faites un
echo $NODE_ENV
Vous pouvez également vérifier si le mode développement est activé ou non dans votre application en utilisant le code suivant.
const DEVMODE = (process.env.NODE_ENV === 'development') ;
Activer les logs
Évidemment pour déboguer votre NodeJS, l’accès aux logs de votre application et du système sera un énorme plus. Les logs également appelés Journalisation en français offrent une piste lors de votre diagnostic. Cela permet de comprendre comment le système s’est comporté afin de trouver et corriger les problèmes.
Pensez donc à les activer ou à intégrer un module de log à votre projet NodeJS.
À titre d’exemple, l’outil Node-Report est un module dont le but est de produire un fichier de résumé des diagnostics lisible par l’humain. Il est destiné à être utilisé aussi bien dans des environnements de développement que de production et inclus les informations suivantes :
- JavaScript et traces de piles natives
- Statistiques de tas
- Informations sur le système
- Usage des ressources
- Bibliothèques chargées en mémoire
Pour intégrer node-report, installez-le avec npm comme ceci :
npm install node-report <em>--save</em>
Et intégrez-le dans votre code en y ajoutant la ligne suivante :
require('node-report')
Une fois que vous l’aurez ajouté à votre application, ce module écoutera automatiquement les exceptions non gérées et tous les événements d’erreur fatale, ce qui mènera au déclenchement d’un rapport.
D’autres modules de logging existent. En voici une petite liste non exhaustive. :
Console.log
L’impression de la sortie sur la console est une technique de débogage très utilisée, mais plutôt basique et fastidieuse. Avec cette méthode, vous pouvez visualiser les données à chaque étape de votre programme et facilement repérer et corriger les bogues. Pour ce faire, il suffit d’appeler la commande console.log dans votre code.
console.log('Je mets mon texte ici') ;
Heureusement, il existe mille fois mieux pour déboguer votre code.
Déboguer avec NodeJS
Node.js est construit autour du moteur JavaScript V8. Ce moteur intègre son propre inspecteur et client de débogage. Pour le lancer, il suffit de lancer node avec le paramètre “inspect” comme ceci :
node inspect index.js
Le débogueur se mettra en pause dès la première ligne et affichera une invite de commande “debug>”. Vous pourrez alors avancer dans le debugging en utilisant les commandes suivantes :
- cont ou c : continuer l’exécution
- next ou n : exécuter la commande suivante
- step ou s : entre dans une fonction en cours d’appel
- out ou o : sortir d’une fonction et retourner à la commande appelante
- pause : interrompt l’exécution du code
watch('var')
Vous pourrez aussi relancer un script avec la commande “restart” ou placer des breakpoints avec la commande “setBreakpoint()” ou “sb()”. Toutefois, en intégrant la mention suivante à l’endroit de votre choix dans le code, vous déclencherez un breakpoint :
debugger;
Node vous permet d’aller encore plus loin avec différents paramètres tels que “trace-warnings” qui peuvent être lancés comme ceci :
node --trace-warnings index.js
Ce qui vous permettra de connaître les avertissements (y compris les dépréciations) liés à votre code en indiquant leur numéro de ligne.
Le débogage avec Chrome
Vous l’avez peut-être remarqué, mais en lançant la commande node avec le paramètre inspect, le débogueur affiche également une URL du type:
Debugger listening on ws://127.0.0.1:9229/64438752-9fce-4cf7-a40b-2bd1e79759c7
On sait ainsi que le débogueur écoute sur tel port (9229 par défaut) et telle URL. Cela permet d’y accéder à distance si par exemple vous devez débugger une application NodeJS se trouvant sur une autre machine que la vôtre ou dans un conteneur Docker.
Ainsi, sur la machine distante, lancez Chrome et entrez ceci dans la barre d’URL :
chrome://inspect
Vous devrez alors vous assurer que la case “Discover network targets” et bien cochée pour que l’URL de debug soit trouvée par Chrome.
Vous pourrez ensuite voir votre application dans la section "Target" et cliquer sur "inspect" pour accéder au débogueur.## Déboguer avec Visual Studio CodeMais la meilleure solution pour le débogage, c’est de faire ça directement dans votre IDE. Ainsi, il est parfaitement possible de débugger votre application NodeJS dans Visual Studio Code
Depuis les dernières versions de Visual Studio Code, le support du debug de NodeJS est intégré à l’IDE. Il existe plusieurs façons d’utiliser le débogueur sous Visual Studio. Vous pouvez activer la fonctionnalité “Auto Attach” (attachement automatique) pour déboguer les processus que vous exécutez dans le terminal intégré de VS Code.
Ou encore passer par le terminal de débogage de JavaScript ("Javascript Debug Terminal"). Enfin, il est possible également de créer une configuration de lancement, le fameux "launch.json" qui vous permettra de démarrer votre programme en l'attachant au débogueur.Le bouton “Debug URL” quant à lui vous permet d’agir à distance avec le débogueur au travers de Visual Studio de la même manière que ce que j’ai expliqué dans la section “Debugging avec Chrome”. C’est très pratique pour déboguer des applications tournant dans un container Docker par exemple.
Et voilà !
Débugger au travers de Visual Studio est ensuite très simple. Les breakpoints sont à gauche et vous pouvez les activer ou les désactiver. Vous pouvez également vous balader d’étape en étape avec les boutons “play”, “step over”, “step in”, “restart”, etc. situés en haut de l’IDE.
VS Code surligne même le point d'arrêt et la ligne sur laquelle vous vous êtes arrêté en jaune, ce qui est super pratique pour rapidement se repérer.Vous l’aurez compris, il existe différents moyens de débugger du NodeJS, mais VS Code rend le débogage de Node.js vraiment simple. C’est vraiment l’option à privilégier si vous voulez y passer le moins de temps possible et être le plus efficace possible, que vous soyez pro ou débutant. L’époque où vous remplissiez votre code de console.log() est révolue mes amis !
Et n’oubliez pas que si vous avez envie de changement professionnel, en vous inscrivant sur Talent.io, les entreprises qui recrutent pourront consulter votre profil et vous envoyer des offres sur-mesure correspondant à vos envies de CDI, télétravail, salaire, localisation, rôle, stack technique…etc.