Il y a toujours divers défis lors du débogage d'un programme. Le flux de travail asynchrone de Node.js ajoute une complexité supplémentaire à ce processus ardu. Bien que le moteur V8 ait effectué quelques mises à jour pour faciliter l'accès aux traces de pile asynchrones, dans de nombreux cas, nous ne rencontrons que des erreurs sur le thread principal du programme, ce qui rend le débogage quelque peu difficile. De même, lorsque notre programme Node.js plante, nous devons souvent s'appuyer sur un outil CLI sophistiqué pour analyser le core dump.
Dans cet article, nous présenterons quelques moyens simples de déboguer les programmes Node.js. [Recommandation du tutoriel vidéo : Tutoriel node js]
Bien entendu, aucune boîte à outils de développement ne propose de journalisation. Nous avons tendance à placer des instructions console.log
tout au long de notre code en développement local, mais ce n'est pas une stratégie véritablement évolutive en production. Vous devrez peut-être effectuer un filtrage et un nettoyage, ou mettre en œuvre une stratégie de journalisation cohérente pour identifier les informations importantes.
Pour mettre en œuvre une stratégie de débogage appropriée orientée journalisation, utilisez un outil de journalisation comme Pino ou Winston. Ceux-ci vous permettront de définir le niveau de journalisation (INFO
, WARN
, ERROR
) qui vous permettra d'imprimer localement des messages de journal détaillés tout en n'imprimant que les messages de journal critiques en production. Vous pouvez également diffuser ces journaux vers un agrégateur ou ailleurs, comme LogStash, Papertrail ou même Slack.
La journalisation nous permet uniquement de comprendre pourquoi le programme ne fonctionne pas comme prévu. Pour un débogage complexe, nous souhaiterons utiliser des points d'arrêt pour examiner le comportement du code lors de son exécution.
Pour cela, vous pouvez utiliser Node Inspect. Node Inspect est un outil de débogage fourni avec Node.js. Il s'agit en réalité d'une simple implémentation des Chrome DevTools du programme qui vous permet d'ajouter des points d'arrêt, de contrôler l'exécution étape par étape, d'afficher les variables et de suivre la pile d'appels.
Il existe deux façons de démarrer Node Inspect, mais la plus simple est probablement d'appeler une application Node.js à l'aide de l'indicateur --inspect-brk
:
$ node --inspect-brk $your_script_name
Après avoir lancé le programme, accédez à l'URL chrome://inspect
dans le navigateur Chrome pour accéder à Chrome DevTools. Avec Chrome DevTools, vous disposez de tout ce dont vous avez besoin pour déboguer JavaScript dans le navigateur. La fonctionnalité la plus utile est la possibilité de vérifier la mémoire. Vous pouvez prendre un instantané du tas et configurer l'utilisation de la mémoire pour comprendre comment la mémoire est allouée et où elle pourrait être divulguée.
De nombreux IDE modernes ont non seulement la capacité de lancer des programmes d'une manière ou d'une autre, mais prennent également en charge le débogage des programmes Node. En plus d'avoir de nombreuses fonctionnalités trouvées dans Chrome DevTools, ils ont également leurs propres fonctionnalités, telles que la possibilité de créer des points de journal et vous permettre de créer plusieurs profils de débogage. Vous pouvez obtenir plus d'informations sur ces IDE en consultant le Guide Node.js sur les clients inspecteurs.
Une autre option consiste à installer ndb, qui est un débogueur autonome pour Node.js, et le navigateur similaire pour DevTools, il agit comme un débogueur local isolé. Il possède également des fonctionnalités supplémentaires non disponibles dans DevTools. Il prend en charge l'édition locale, ce qui signifie que vous pouvez modifier votre code et obtenir une logique mise à jour directement prise en charge par la plate-forme de débogage. C’est idéal pour les itérations rapides. w
Supposons que votre programme plante en raison d'une erreur catastrophique (telle qu'une erreur d'accès à la mémoire). Ces phénomènes sont peut-être rares, mais ils surviennent, surtout si votre application s'appuie sur du code natif.
Pour enquêter sur ce type de problème, utilisez llnode. Lorsque le programme plante, les llnode
cadres et objets de la pile JavaScript peuvent être vérifiés en les mappant à des objets du côté C/C++. Pour l'utiliser, vous avez d'abord besoin d'un core dump de votre programme. Pour ce faire, vous devez utiliser process.abort
au lieu de process.exit
pour fermer le processus dans votre code. Lorsque vous utilisez process.abort
, le processus Node génère un fichier core dump à sa sortie.
Pour mieux comprendre ce que llnode
peut offrir, cette vidéo présente certaines de ses fonctionnalités.
En plus de tout ce qui précède, des packages tiers sont également recommandés pour un débogage plus approfondi.
Le premier s'appelle simplement debug. À l'aide du débogage, vous pouvez attribuer des espaces de noms spécifiques pour enregistrer les messages en fonction des noms de fonctions ou de modules entiers. Les messages qui sont ensuite imprimés sur la console peuvent être sélectionnés via des variables d'environnement spécifiques.
Par exemple, voici un serveur Node.js qui enregistre plusieurs messages de l'ensemble du programme et de la pile middleware, tels que sequelize
, express:application
et express:router
:
Si nous définissons la variable d'environnement DEBUG sur express:router
et lançons le même programme, seuls les messages marqués express:router
sont affichés :
Par En filtrant les messages de cette manière, vous pouvez explorer en détail le comportement des différentes parties de votre programme sans avoir à modifier radicalement la journalisation de votre code.
tracer et clarifier sont mieux utilisés ensemble.
trace
Étendez votre trace de pile asynchrone en fournissant plus de détails sur la méthode asynchrone appelée, une feuille de route que Node.js ne fournit pas par défaut. clarify
Aide en supprimant toutes les informations des traces de pile spécifiques aux composants internes de Node.js. Cela vous permet de vous concentrer uniquement sur les appels de fonction à votre programme.
Ces modules ne sont pas recommandés pour fonctionner dans un environnement de production ! Ils ne doivent être activés que lors du débogage dans un environnement de développement local.
Pour plus de connaissances liées à la programmation, veuillez visiter : Enseignement de la programmation ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!