Comment déboguer les applications Node.js?

1578

Comment déboguer une application serveur Node.js?

En ce moment, j'utilise principalement le débogage des alertes avec des instructions d'impression comme ceci:

sys.puts(sys.inspect(someVariable));

Il doit y avoir une meilleure façon de déboguer. Je sais que Google Chrome dispose d'un débogueur en ligne de commande. Ce débogueur est-il également disponible pour Node.js?

Fabian Jakobs
la source
3
Vous pouvez utiliser Locus pour l'injection en ligne de commande.
Ali Davut
5
Si vous souhaitez déboguer avec l'approche IDE traditionnelle, utilisez vscode, utilisez vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578
4
J'ai trouvé cet article très intéressant, et cela fonctionne très bien pour moi: débogage de Node.js avec Chrome DevTools . J'espère que ça aide :)
Timbergus
2
"alerte de débogage" :)
The Red Pea
Gardez à l'esprit que vous devez exécuter nod avec --inspect-brkINSTEAD OF --inspectsi vous souhaitez déboguer le code serveur réel au moment du chargement. Voir stackoverflow.com/questions/59596138
Jorge Orpinel

Réponses:

1261

l'inspecteur de nœuds pourrait sauver la situation! Utilisez-le depuis n'importe quel navigateur prenant en charge WebSocket . Points d'arrêt, profileur, livecoding, etc ... C'est vraiment génial.

Installez-le avec:

npm install -g node-inspector

Exécutez ensuite:

node-debug app.js
Daralthus
la source
14
Souhaite que l'inspecteur de noeud soit actif. Le composant de profilage doit obtenir un peu d'amour.
Jonathan Dumaine
13
Malheureusement pour moi, node-inspector ne fonctionne pas avec les dernières versions de Node.js et il n'a pas pris en charge la connexion à la console du navigateur depuis la version 0.1. node-codein était juste bogué. J'ai donc écrit mon propre module pour aider au débogage en vous permettant de vider des objets et autres vers votre console de navigateur Web. Je pensais que cela pourrait être utile à quelqu'un d'autre: node-monkey . De plus, cela fonctionne à la fois dans Firefox ET Chrome.
Justin Warkentin
7
Comme il s'agissait d'un outil apparemment incroyable et populaire, le fait que l'auteur d'origine ait admis qu'il n'avait plus les ressources pour le maintenir ne serait-il pas un problème car la communauté open source pourrait le récupérer?
PeterT
34
Maintenant l'inspecteur est maintenant activement maintenu par StrongLoop et travaille à nouveau avec la dernière version (0.3) yay! Annonce ici: blog.strongloop.com/…
balupton
21
"Depuis la version 6.3, Node.js fournit un débogueur basé sur DevTools qui déprécie principalement Node Inspector, voir par exemple ce blog pour commencer. Le débogueur intégré est développé directement par l'équipe V8 / Chromium et fournit certaines avancées fonctionnalités (par exemple, traces de pile longues / asynchrones) trop difficiles à implémenter dans Node Inspector. " - dit le
dépôt d'
750

Débogage

Profilage

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

Heapdumps

Flamegraphs

Tracé

Enregistrement

Bibliothèques qui produisent des informations de débogage

Bibliothèques qui améliorent les informations de trace de pile

Analyse comparative

Autre

Héritage

Ceux-ci ont l'habitude de fonctionner mais ne sont plus maintenus ou ne s'appliquent plus aux versions de nœuds modernes.

balupton
la source
8
À propos de Nodetime: pour ceux qui ne veulent pas envoyer leurs données aux serveurs nodetime, il existe une "alternative" locale (elle est toujours basée sur nodetime), le lookmodule, comme indiqué dans stackoverflow.com/questions/12864221/nodejs-memory- profilage
reallynice
Je ne trouve pas les rapports de CPU de nodetime très utiles: 1. Je reçois juste un arbre de méthodes, sans temps de «self». 2. On dirait que les branches des arbres sont coupées en dessous d'un certain nombre de précentage. Ces 2, il est très difficile de comprendre où le processeur passe la plupart de son temps.
shacharz
npm install -g profiler se plaint de l'absence de python sur Windows 7. J'ai essayé de définir python = C: \ Python34 \, mais cela donne un plantage.
Stepan Yakovenko
Le seul profileur fonctionnant hors de la boîte est nodetime. Mais son stacktrace de profilage cpu est inutilisable (il ne donne pas assez de détails). Les outils Nodejs 4 msvc 2012 ont également un profileur, mais il a également signalé un bogue critique non corrigé ...
Stepan Yakovenko
Le seul profileur qui a fonctionné pour moi était nprof+ v8.logde node --prof.
Dan Abramov
253

Le débogueur V8 publié dans le cadre des outils de développement Google Chrome peut être utilisé pour déboguer des scripts Node.js. Une explication détaillée de la façon dont cela fonctionne peut être trouvée dans le wiki Node.js GitHub .

Fabian Jakobs
la source
12
Je suis intéressé, après la présentation à Google IO de Paul Irish et Pavel, est-il maintenant possible de déboguer node.js directement vers Chrome Developer Tools sans avoir besoin d'éclipse?
balupton
+1 a très bien fonctionné pour moi. Utilisation d'une nouvelle version d'Eclipse 3.x, x64 sur Mac OS X. Les instructions d'installation sont également bien écrites. Je vous remercie.
barista amateur
Comprend également Nodeclipse nodeclipse.org (avec quelques bugs liés à Node.js corrigés)
Paul Verest
Mon entrée dans cette arène est trepanjs ( npmjs.com/package/trepanjs ). Il a toutes les qualités du débogueur de noeud, mais se conforme mieux à gdb. Il a également plus de fonctionnalités et de commandes comme la mise en évidence de la syntaxe, une aide en ligne plus complète et une évaluation plus intelligente. Voir github.com/rocky/trepanjs/wiki/Cool-things pour certaines de ses fonctionnalités intéressantes.
rocheux
1
La fonctionnalité est actuellement disponible dans les versions nocturnes. Consultez les instructions ici:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone
191

Noeud a son propre construit dans débogueur GUI de la version 6.3 ( en utilisant les DevTools de Chrome)

Débogueur GUI intégré aux nœuds

Passez simplement le drapeau de l'inspecteur et vous recevrez une URL à l'inspecteur:

node --inspect server.js

Vous pouvez également casser sur la première ligne en passant à la --inspect-brkplace.

Alister
la source
2
Non pas pour ignorer les étapes ci-dessus, mais juste pour partager ... J'ai essayé de créer un wrapper légèrement plus robuste et plus facile à installer. Voir: github.com/jaridmargolin/inspect-process
Jarid R. Margolin
1
@ JaridR.Margolin Nice. J'ai mis à jour la réponse pour l'utiliser à la place. Beaucoup plus facile à installer et fonctionne mieux :)
gregers
2
Cette réponse est actuellement en bas et c'est la seule qui a réellement fonctionné pour moi. C'est renversant génial!
LOAS
3
Au cas où cela aiderait quelqu'un, j'ai lancé une vidéo expliquant ce processus sur youtu.be/rtZKUnks6jI .
RoccoB
2
Où avez-vous obtenu le thème sombre des outils de développement Chrome?
Pieter Meiresone du
93

La version 0.3.4+ de Node.js a un support de débogage intégré.

node debug script.js

Manuel: http://nodejs.org/api/debugger.html

JulianW
la source
1
Avez-vous des liens vers la documentation sur la façon de l'utiliser?
Fabian Jakobs
2
Je n'ai pas de documents. vient d'être mis à jour en v0.3.5. mettre une ligne "debugger;" dans votre code qui servira de point d'arrêt. Cela fonctionne comme ndb / gdb. après avoir fait l'aide de type "node debug script.js". u verra la commande qu'il prend en charge. p = print, l = list ... donc vous n'avez pas besoin de taper le monde entier
JulianW
2
Notez que sous Windows, c'est "node.exe --debug myscript.js" mais cela ne fonctionne toujours pas.
Marc
6
Vous devez probablement passer --debugà debugsans les tirets. C'est ainsi que je l'ai finalement fait fonctionner. C'est déroutant --debuget debugfaire deux choses différentes.
benekastah
Comment faire pour que le programme s'exécute réellement? "r -> app is already running...", lorsque j'essaie de continuer et que je rencontre une instruction qui essaie d'obtenir une entrée, elle me renvoie à l'invite de débogage au lieu de me laisser entrer l'entrée requise.
Michael
70

Visual Studio Code sera mon choix pour le débogage. Pas de frais généraux pour installer des outils ou desnpm installtrucs. Définissez simplement le point de départ de votre application dans package.json et VSCode créera automatiquement un fichier de configuration dans votre solution. Il est basé surElectron, sur lequel sont construits des éditeurs comme Atom.

VS Code offre une expérience de débogage similaire à celle que vous auriez pu avoir dans d'autres IDE comme VS, Eclipse, etc.

entrez la description de l'image ici entrez la description de l'image ici

Shreyas
la source
C'est cool mais il y a du retard. C'est pourquoi je préfère Sublime.
calbertts
3
mais sublime n'a pas de débogueur, et je pense que le code VS est aussi assez rapide
Syed Faizan
1
J'ai une licence sublime depuis 5 ans. Depuis quelques mois, je n'ai même pas installé Sublime Text, juste vscode. Out of the box a beaucoup d'outils qui me manquent dans Sublime (comme le terminal intégré ..).
elboletaire
me demandant toujours un dossier de configuration, cela ne fonctionne pas dès le départ
carkod
@carkod activer la préférence d' attachement automatique vs code et utiliser le terminal vs code pour démarrer votre script, ex node --inspect file-name.js
Vipul Dessai
57

J'utilise personnellement JetBrains WebStorm car c'est le seul IDE JavaScript que j'ai trouvé, ce qui est parfait pour le frontend et le backend JavaScript.

Il fonctionne sur plusieurs systèmes d'exploitation et intègre le débogage Node.js (ainsi qu'une tonne d'autres choses] ( http://www.jetbrains.com/webstorm/features/index.html ).

Mes seuls «problèmes» / éléments de liste de souhaits sont étaient :

  1. Il semble être plus gourmand en ressources sur Mac que sur Windows Cela ne semble plus être un problème dans la version 6.
  2. Ce serait bien s'il avait un support Snippet (comme ceux de Sublime Text 2 - c'est-à-dire tapez 'fun' et appuyez sur 'tab' pour mettre une fonction. Voir le commentaire @WickyNilliams ci-dessous - Avec les modèles en direct, vous avez également la prise en charge des extraits.
isNaN1247
la source
10
webstorm prend en charge les extraits de code BTW ;-) bien qu'ils soient connus sous le nom de "modèles dynamiques" au lieu d'extraits de code.
WickyNilliams
3
Si vous souhaitez simplement déboguer une application node.js et disposez déjà d'une licence Intellij IDEA, vous pouvez simplement installer le plugin node.js sans avoir à acheter la licence WebStorm. Mettre en place une configuration run / debug est très simple une fois le plugin installé.
Josh Liptzin
42

Beaucoup de bonnes réponses ici, mais j'aimerais ajouter mon point de vue (en fonction de l'évolution de mon approche)

Journaux de débogage

Avouons-le, nous aimons tous un bien console.log('Uh oh, if you reached here, you better run.')et parfois cela fonctionne très bien, donc si vous êtes réticent à vous en éloigner trop, au moins ajoutez un peu de bling à vos journaux avec le débogage de Visionmedia .

Débogage interactif

Aussi pratique que puisse être la consignation de la console, pour déboguer professionnellement, vous devez retrousser vos manches et rester coincé. Définissez des points d'arrêt, parcourez votre code, inspectez les étendues et les variables pour voir ce qui cause ce comportement étrange. Comme d'autres l'ont mentionné, l' inspecteur de nœuds est vraiment le genou des abeilles. Il fait tout ce que vous pouvez faire avec le débogueur intégré, mais en utilisant cette interface familière de Chrome DevTools. Si, comme moi, vous utilisez Webstorm , voici un guide pratique pour déboguer à partir de là.

Traces de pile

Par défaut, nous ne pouvons pas tracer une série d'opérations sur différents cycles de la boucle d'événements (ticks). Pour contourner cela, jetez un œil à longjohn (mais pas en production!).

Fuites de mémoire

Avec Node.js, nous pouvons avoir un processus serveur censé rester en place pendant un temps considérable. Que faites-vous si vous pensez qu'il a provoqué des fuites désagréables? Utilisez heapdump et Chrome DevTools pour comparer certains instantanés et voir ce qui change.


Pour quelques articles utiles, consultez

Si vous avez envie de regarder une vidéo, alors

Quel que soit le chemin que vous choisissez, assurez-vous simplement de comprendre comment vous déboguez

entrez la description de l'image ici

C'est une chose douloureuse
De regarder ses propres problèmes et de savoir
que toi-même et personne d'autre n'y est arrivé

Sophocles, Ajax

Philip O'Brien
la source
41

Theseus est un projet d'Adobe research qui vous permet de déboguer votre code Node.js dans leurs supports d' édition Open Source . Il possède des fonctionnalités intéressantes telles que la couverture de code en temps réel, l'inspection rétroactive, l'arborescence d'appels asynchrones.

capture d'écran

Sindre Sorhus
la source
c'est assez cool, je ne sais toujours pas ce qui est Backtrace pour tho
misaxi
J'adore actuellement Thésée, mais j'ai encore des problèmes où je dois définir un point d'arrêt et un suivi. Je dois actuellement tuer mon application, démarrer le nœud avec --debug, suivre trhough, puis démarrer l'application avec node-theseus. Est-il possible d'utiliser Theseus avec des points d'arrêt? J'ai essayé de chercher sur la page GitHub, StackOverflow et les forums, mais sans succès jusqu'à présent. Suis-je en train de manquer quelque chose?
Eugene
25

Les outils Node.js pour Visual Studio 2012 ou 2013 incluent un débogueur. La vue d'ensemble ici indique que "les outils Node.js pour Visual Studio incluent une prise en charge complète du débogage des applications de nœuds". Étant nouveau dans Node.js, mais ayant une expérience en .NET, j'ai trouvé que cet ajout était un excellent moyen de déboguer les applications Node.js.

John81
la source
23

Visual Studio Code a un support de débogage Node.js vraiment agréable. Il est gratuit, open source et multiplateforme et fonctionne sous Linux, OS X et Windows.

Vous pouvez même déboguer des tâches de grognement et de gorgée , si vous en avez besoin ...

Hans
la source
1
À partir de Visual Studio Code 8.0, la prise en charge du débogage pour OSX et Linux est devenue très bonne.
bgse
Après avoir passé une soirée entière à faire fonctionner node-inspector et strongloop sous Windows (Visual Studio Community, rétrograder vers npm 2, installer python, variables env, utiliser cmd not babun / cygwin etc. etc.) puis jouer avec ceci pendant une heure , Je dois dire que c'est la meilleure option au moins dans les fenêtres et éventuellement en général (si vous n'avez pas de webstorn)
dashambles
22

J'ai écrit une approche différente pour déboguer le code Node.js qui est stable et extrêmement simple. Il est disponible sur https://github.com/sa/iron-node .

Entrez la description de l'image ici

Un débogueur visuel multiplateforme open source.

Installation:

npm install iron-node -g;

Déboguer:

iron-node yourscript.js;

Stephan Ahlf
la source
15

Si vous utilisez l' IDE Atom , vous pouvez installer le node-debuggerpackage.

Uchiha Itachi
la source
15

Utilisation de Chrome version 67.0.3396.62 (+)

  1. Exécuter l'application de nœud

node --inspect-brk = 0.0.0.0: 9229 server.js (nom de fichier du serveur js)

  1. Parcourez votre application dans Chrome, par exemple "localhost: port"
  2. Ouvrez DevTools.
  3. Cliquez sur l'icône du nœud à côté de l'icône du périphérique réactif.

entrez la description de l'image ici

Il y aura une autre fenêtre DevTools qui apparaîtra spécifiquement pour le débogage de l'application de nœud.

entrez la description de l'image ici

babidi
la source
13

J'ai créé un petit outil soigné appelé pry.js qui peut vous aider.

Mettez une simple déclaration quelque part dans votre code, exécutez votre script normalement et le nœud arrêtera le thread actuel vous donnant accès à toutes vos variables et fonctions. Affichez / modifiez / supprimez-les à volonté!

var pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) // magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()
Blaine
la source
11

Il y a un client de débogueur de ligne de commande intégré dans Node.js. L'IDE Cloud 9 a également un débogueur (visuel) plutôt sympa .

yojimbo87
la source
Cloud 9 est le chemin à parcourir pour moi, en particulier donne la liberté de code n'importe où sans transporter mon ordinateur portable.
Teoman shipahi
8

Démarrez votre processus de nœud avec l' indicateur --inspect .

node --inspect index.js

puis Ouvrir chrome://inspecten chrome. Cliquez sur le lien "Ouvrir les DevTools dédiés pour le nœud" ou installez ce extension Chrome pour ouvrir facilement les DevTools Chrome.

Pour plus d'informations, reportez-vous à ce lien

Rahul Kumar
la source
7

Si vous avez besoin d'une bibliothèque de journalisation puissante pour Node.js, Tracer https://github.com/baryon/tracer est un meilleur choix.

Il génère des messages de journal avec un horodatage, un nom de fichier, un nom de méthode, un numéro de ligne, un chemin ou une pile d'appels, prend en charge la console couleur et prend en charge la base de données, le transport de fichiers et de flux facilement. Je suis l'auteur.

Baryon Lee
la source
7

En supposant que vous avez installé node-inspector sur votre ordinateur (sinon, tapez simplement 'npm install -g node-inspector'), il vous suffit d'exécuter:

node-inspector & node --debug-brk scriptFileName.js

Et collez l'URI de la ligne de commande dans un navigateur WebKit (Chrome / Safari).

Shaheen Ghiassy
la source
1
l'inspecteur de nœud a déjà été mentionné; peut-être supprimer cette réponse?
Dan Dascalescu
5

IntelliJ fonctionne à merveille pour Node.js.

De plus, IntelliJ prend bien en charge l '«assistance de code».

卢 声 远 Shengyuan Lu
la source
4

L' IDE NetBeans prend en charge Node.js depuis la version 8.1 :

<...>

Faits saillants de la nouvelle fonctionnalité

Développement d'applications Node.js

  • Nouvel assistant de projet Node.js
  • Nouvel assistant Node.js Express
  • Éditeur JavaScript amélioré
  • Nouveau support pour l'exécution des applications Node.js
  • Nouveau support pour le débogage des applications Node.js.

<...>

Références supplémentaires:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Application Node.js Express dans NetBeans IDE, Geertjan-Oracle .
Sergey Brunov
la source
4

Utilisez ces commandes

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
Zahirul Haque
la source
3

Un moyen rapide et sale de déboguer de petits scripts Node.js avec votre débogueur de navigateur préféré serait d'utiliser browserify . Notez que cette approche ne fonctionne pas avec les applications qui nécessitent des bibliothèques d'E / S natives, mais elle est assez bonne pour la plupart des petits scripts.

$ npm install -g browserify

Déplacez maintenant tous vos var x = requires('x')appels dans un requires.jsfichier et exécutez:

$ browserify requires.js -s window -o bundle.js

(L'inconvénient ici est que vous devez soit déplacer, soit commenter requires dans tous vos fichiers.)

Incluez le bundle.jsdans un fichier HTML comme ceci:

<script type="text/javascript" src="bundle.js"></script>

Maintenant, chargez le fichier dans votre navigateur et appuyez sur F12et alto: déboguer dans le navigateur.

Gerold Meisinger
la source