¿Cómo depuro aplicaciones Node.js?

1652

¿Cómo depuro una aplicación de servidor Node.js?

En este momento, estoy usando principalmente la depuración de alertas con declaraciones de impresión como esta:

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

Debe haber una mejor forma de depurar. Sé que Google Chrome tiene un depurador de línea de comandos. ¿Este depurador también está disponible para Node.js?

6
1294
+50

¡Nodo-inspector podría salvar el día! Úselo desde cualquier navegador compatible con WebSocket . Puntos de interrupción, generador de perfiles, codificación en vivo, etc. Es realmente impresionante.

Instálelo con:

npm install -g node-inspector

Entonces corre:

node-debug app.js
17
  • 15
    El inspector de nodos de Wish estaba activo. El componente de creación de perfiles necesita algo de amor. Jonathan Dumaine 5/12/11 a las 0:32
  • 14
    Desafortunadamente para mí, el inspector de nodos no funciona con las últimas versiones de Node.js y no admite el inicio de sesión en la consola del navegador desde la v0.1. node-codein solo tenía errores. Entonces, escribí mi propio módulo para ayudar con la depuración al permitirle volcar objetos y demás en la consola de su navegador web. Pensé que podría ser útil para otra persona: node-monkey . Además, funciona tanto en Firefox como en Chrome. Justin Warkentin 20/10/12 a las 3:17
  • 7
    Dado que esta fue una herramienta aparentemente tan sorprendente y popular, seguramente el hecho de que el autor original haya admitido que ya no tiene los recursos para mantenerla no sería un problema, ya que la comunidad de código abierto podría utilizarla. PeterT 21/03/2013 a las 18:13
  • 34
    Ahora, el inspector ahora es mantenido activamente por StrongLoop y está trabajando de nuevo con la última versión (0.3) ¡yay! Anuncio aquí: blog.strongloop.com/…balupton 25/07/2013 a las 15:31
  • 25
    "Desde la versión 6.3, Node.js proporciona un depurador integrado basado en DevTools que en su mayoría desaprueba Node Inspector; consulte, por ejemplo, esta publicación de blog para comenzar. El depurador integrado es desarrollado directamente por el equipo de V8 / Chromium y proporciona ciertos características (por ejemplo, seguimientos de pila largos / asíncronos) que son demasiado difíciles de implementar en Node Inspector ". - dice el repositorio del inspector de nodosThisClark 4 de junio de 2017 a las 0:31
772

Depuración

Perfilado

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

Heapdumps

Flamegraphs

Rastreo

Inicio sesión

Bibliotecas que generan información de depuración

Bibliotecas que mejoran la información de seguimiento de la pila

Benchmarking

Otro

Legado

Estos suelen funcionar, pero ya no se mantienen o ya no se aplican a las versiones modernas de nodos.

8
  • 8
    Acerca de Nodetime: para aquellos que no quieren enviar sus datos a los servidores de nodetime, existe una "alternativa" local (todavía se basa en nodetime), el lookmódulo, como se señala en stackoverflow.com/questions/12864221/nodejs-memory- perfiladoreallynice 25/10/13 a las 12:28
  • No encuentro los informes de la CPU de nodetime muy útiles: 1. Solo obtengo un árbol de métodos, sin tiempo "propio". 2. Parece que las ramas de los árboles se recortan por debajo de un cierto porcentaje. Esos 2 hacen que sea muy difícil entender dónde pasa la mayor parte del tiempo la CPU. shacharz 20 de julio de 2014 a las 12:09
  • npm install -g profiler se queja de que falta Python en Windows 7. Intenté configurar python = C: \ Python34 \, pero esto produce un bloqueo. Stepan Yakovenko 8 de septiembre de 2014 a las 12:45
  • El único generador de perfiles que funciona desde el primer momento es nodetime. Pero su stacktrace de perfiles de CPU no se puede utilizar (no proporciona suficientes detalles). Nodejs tools 4 msvc 2012 también tiene generador de perfiles, pero también ha informado de un error crítico no solucionado ...Stepan Yakovenko 8 de septiembre de 2014 a las 12:47
  • El único generador de perfiles que funcionó para mí fue nprof+ v8.logde node --prof. Dan Abramov 9 de enero de 2015 a las 1:07
263

El depurador V8 lanzado como parte de las herramientas para desarrolladores de Google Chrome se puede utilizar para depurar scripts de Node.js. Una explicación detallada de cómo funciona este se pueden encontrar en el wiki Node.js GitHub .

7
  • 12
    Estoy interesado, después de la presentación en Google IO que hicieron Paul Irish y Pavel, ¿ahora es posible depurar node.js directamente en Chrome Developer Tools sin la necesidad de eclipse? balupton 19 de mayo de 2011 a las 20:35
  • +1 Funcionó muy bien para mí. Usando una nueva versión de Eclipse 3.x, x64 en Mac OS X. Las instrucciones de instalación también están bien escritas. Gracias. amateur barista 6 ene 12 a las 16:40
  • También viene dentro de Nodeclipse nodeclipse.org (con algunos errores relacionados con Node.js corregidos)Paul Verest 16 de junio de 2013 a las 15:53
  • Mi entrada en este campo es trepanjs ( npmjs.com/package/trepanjs ). Tiene todas las bondades del depurador de nodos, pero se ajusta mejor a gdb. También tiene más funciones y comandos como el resaltado de sintaxis, una ayuda en línea más extensa y una evaluación más inteligente. Consulta github.com/rocky/trepanjs/wiki/Cool-things para conocer algunas de sus funciones interesantes. rocky 18 de mayo de 2015 a las 22:04
  • 1
    La función está disponible actualmente en las versiones nocturnas. Consulte aquí para obtener instrucciones:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumtzeronone 5 de julio de 2016 a las 2:25
208

Nodo tiene su propio construido en la GUI depurador partir de la versión 6.3 (usando DevTools de Chrome)

Depurador de GUI integrado de nodos

Simplemente pase la bandera del inspector y se le proporcionará una URL para el inspector:

node --inspect server.js

También puede romper en la primera línea pasando en su --inspect-brklugar.

8
  • 2
    No para descartar los pasos anteriores, sino solo para compartir ... Intenté crear un contenedor que sea un poco más robusto y más fácil de instalar. Ver: github.com/jaridmargolin/inspect-processJarid R. Margolin 17/11/2016 a las 22:30
  • 1
    @ JaridR.Margolin Nice. Actualicé la respuesta para usar eso en su lugar. Mucho más fácil de configurar y funciona mejor :)gregers 13/12/2016 a las 10:31
  • 2
    Esta respuesta se encuentra actualmente en la parte inferior y es la única que realmente me ha funcionado. ¡Esto es increíble! LOAS 2 de enero de 2017 a las 10:44
  • 3
    En caso de que ayude a alguien, lancé un video que explica este proceso en youtu.be/rtZKUnks6jI . RoccoB 23 mar 2017 a las 18:15
  • 2
    ¿De dónde sacaste el tema oscuro para las herramientas de desarrollo de Chrome? Pieter Meiresone 10 de septiembre de 2017 a las 6:30
96

Node.js versión 0.3.4+ tiene soporte de depuración incorporado.

node debug script.js

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

6
  • 1
    ¿Tiene algún enlace a la documentación sobre cómo usarlo? Fabian Jakobs 16 de enero de 2011 a las 12:17
  • 2
    No tengo ningún documento. recién actualizado a v0.3.5. poner una línea "depurador"; en su código que actuará como punto de interrupción. Funciona como ndb / gdb. después de hacer "node debug script.js" escriba ayuda. Verá el comando que admite. p = print, l = list ... así que no necesitas escribir el mundo completoJulianW 20 de enero de 2011 a las 23:59
  • 2
    Tenga en cuenta que en Windows es "node.exe --debug myscript.js" pero todavía no funciona. Marc 6 de septiembre de 2011 a las 12:13
  • 6
    Probablemente tenga que cambiar --debuga debugsin guiones. Así fue como finalmente logré que funcionara. Es confuso --debugy debughacer dos cosas diferentes. benekastah 7/10/11 a las 5:55
  • ¿Cómo se consigue que el programa se ejecute realmente? "r -> app is already running...", cuando trato de continuar y me encuentro con una declaración que está tratando de obtener una entrada, me devuelve al indicador de depuración en lugar de dejarme ingresar la entrada que se requiere. Michael 11/07/2016 a las 23:22
74

Visual Studio Code será mi elección para la depuración. Sin gastos generales de instalación de herramientas onpm installcosas. Simplemente establezca el punto de partida de su aplicación en package.json y VSCode creará automáticamente un archivo de configuración dentro de su solución. Se basa enElectron, sobre el que se basan editores como Atom.

VS Code gives similar debugging experience as you might have had in other IDEs like VS, Eclipse, etc.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

5
  • Es genial pero tiene retraso. Por eso prefiero Sublime siempre. calbertts 24 de mayo de 2017 a las 21:48
  • 3
    pero sublime no tiene un depurador, y creo que el código VS también es bastante rápidoSyed Faizan 27/10/2017 a las 10:35
  • 1
    Tengo una licencia sublime desde hace 5 años. Desde hace unos meses ni siquiera instalo Sublime Text, solo vscode. Fuera de la caja tiene muchas herramientas que extraño en Sublime (como el terminal integrado ..). elboletaire 19/03/18 a las 13:22
  • siempre me pide una carpeta de configuración, no funciona de fábricacarkod 18/06/18 a las 14:55
  • @carkod habilitar vs preferencia de adjuntar código automáticamente y usar el terminal de código vs para iniciar su script, ex nodo --inspect file-name.jsVipul Dessai 25/12/19 a las 11:16
59

Personalmente, uso JetBrains WebStorm, ya que es el único IDE de JavaScript que he encontrado, que es excelente tanto para JavaScript frontend como backend.

Funciona en varios sistemas operativos y tiene la depuración de Node.js incorporada (así como un montón de otras cosas) ( http://www.jetbrains.com/webstorm/features/index.html ).

Mis únicos 'problemas' / artículos de la lista de deseos están fueron :

  1. Parece tener más recursos en Mac que en Windows Ya no parece un problema en la versión 6.
  2. Sería bueno si tuviera soporte para Snippet (como los de Sublime Text 2 , es decir, escriba 'divertido' y toque 'tabulador' para poner una función. Vea el comentario de @WickyNilliams a continuación: con Live Templates también tiene soporte para fragmentos.
2
  • 10
    webstorm tiene soporte para fragmentos por cierto ;-) aunque se conocen como "Plantillas en vivo" en lugar de fragmentos. WickyNilliams 26 de septiembre de 2012 a las 15:12
  • 3
    Si solo desea depurar una aplicación node.js y ya tiene una licencia Intellij IDEA, puede instalar el complemento node.js sin tener que comprar la licencia WebStorm. Configurar una configuración de ejecución / depuración es muy fácil una vez que se instala el complemento. Josh Liptzin 11/06/2014 a las 19:45
44

Aquí hay muchas respuestas excelentes, pero me gustaría agregar mi vista (según cómo evolucionó mi enfoque)

Registros de depuración

Seamos realistas, a todos nos encanta lo bueno console.log('Uh oh, if you reached here, you better run.')y, a veces, eso funciona muy bien, así que si eres reticente a alejarte demasiado de él, al menos agrega algo de brillo a tus registros con la depuración de Visionmedia .

Depuración interactiva

Tan útil como puede ser el registro de la consola, para depurar profesionalmente necesita arremangarse y quedarse atascado. Establezca puntos de interrupción, revise su código, inspeccione los alcances y las variables para ver qué está causando ese comportamiento extraño. Como han mencionado otros, el inspector de nodos es realmente el mejor de los casos. Hace todo lo que puede hacer con el depurador integrado, pero utilizando esa interfaz familiar de Chrome DevTools. Si, como yo, usa Webstorm , aquí hay una guía útil para depurar desde allí.

Rastros de pila

De forma predeterminada, no podemos rastrear una serie de operaciones en diferentes ciclos del bucle de eventos (ticks). Para evitar esto, eche un vistazo a longjohn (¡pero no en producción!).

Pérdidas de memoria

Con Node.js podemos tener un proceso de servidor que se espera que permanezca activo durante un tiempo considerable. ¿Qué haces si crees que se han producido algunas fugas desagradables? Use heapdump y Chrome DevTools para comparar algunas instantáneas y ver qué está cambiando.


Para ver algunos artículos útiles, consulte

Si tiene ganas de ver un video, entonces

Cualquiera que sea la ruta que elija, asegúrese de comprender cómo está depurando

ingrese la descripción de la imagen aquí

It is a painful thing
To look at your own trouble and know
That you yourself and no one else has made it

Sophocles, Ajax

0
42

Theseus es un proyecto de investigación de Adobe que le permite depurar su código Node.js en sus soportes de editor de código abierto . Tiene algunas características interesantes como cobertura de código en tiempo real, inspección retroactiva, árbol de llamadas asíncronas.

captura de pantalla

2
  • esto es muy bueno, todavía no sé para qué Backtracemisaxi 18/02/2014 a las 23:33
  • Actualmente amo a Theseus, pero todavía tengo algunos problemas en los que necesito establecer un punto de interrupción y rastrear. Actualmente tengo que cerrar mi aplicación, iniciar el nodo con --debug, rastrear y luego iniciar la aplicación con node-theseus. ¿Es posible usar Theseus con puntos de interrupción? Intenté buscar en la página de GitHub, StackOverflow y foros, pero hasta ahora no tuve suerte. ¿Me estoy perdiendo de algo? Eugene 15 de julio de 2015 a las 1:21
26

Node.js Tools para Visual Studio 2012 o 2013 incluye un depurador. La descripción general aquí indica que "Node.js Tools para Visual Studio incluye soporte completo para depurar aplicaciones de nodo". Siendo nuevo en Node.js, pero con experiencia en .NET, he encontrado que este complemento es una excelente manera de depurar aplicaciones de Node.js.

0
24

Visual Studio Code tiene un soporte de depuración de Node.js realmente bueno. Es gratuito, de código abierto y multiplataforma y se ejecuta en Linux, OS X y Windows.

Incluso puede depurar tareas de gruñido y trago , en caso de que necesite ...

2
  • 1
    A partir de Visual Studio Code 8.0, el soporte de depuración para OSX y Linux se volvió realmente bueno. bgse 20 oct 2015 a las 2:35
  • Después de pasar una noche completa haciendo que el inspector de nodos y strongloop funcionen bajo Windows (Comunidad de Visual Studio, degradar a npm 2, instalar python, variables env, usar cmd, no babun / cygwin, etc., etc.) y luego jugar con esto durante una hora , Debo decir que esta es la mejor opción al menos en Windows y posiblemente en general (si no tiene webstorn)dashambles 7 de febrero de 2016 a las 13:33
22

Escribí un enfoque diferente para depurar el código de Node.js que es estable y es extremadamente simple. Está disponible en https://github.com/sa/iron-node .

Ingrese la descripción de la imagen aquí

Un depurador visual multiplataforma de código abierto.

Instalación:

npm install iron-node -g;

Depurar:

iron-node yourscript.js;

16

Si está utilizando Atom IDE , puede instalar el node-debuggerpaquete.

16

Con la versión de Chrome 67.0.3396.62 (+)

  1. Ejecutar la aplicación de nodo

node --inspect-brk=0.0.0.0:9229 server.js(server js filename)

  1. Explore su aplicación en Chrome, por ejemplo, "localhost: port"
  2. Abra DevTools.
  3. Haga clic en el icono del nodo junto al icono del dispositivo receptivo.

ingrese la descripción de la imagen aquí

Habrá otra ventana de DevTools que aparecerá específicamente para depurar la aplicación de nodo.

ingrese la descripción de la imagen aquí

15

Creé una pequeña y elegante herramienta llamada pry.js que puede ayudarte.

Ponga una declaración simple en algún lugar de su código, ejecute su script normalmente y el nodo detendrá el hilo actual dándole acceso a todas sus variables y funciones. ¡Visualícelos / edítelos / elimínelos a voluntad!

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()
0
12

Hay un cliente depurador de línea de comandos incorporado dentro de Node.js. Cloud 9 IDE también tiene un depurador (visual) bastante bueno .

1
  • Cloud 9 es un camino a seguir para mí, especialmente brinda la opción de libertad de código en cualquier lugar sin tener que llevar mi computadora portátil. Teoman shipahi 8 de enero de 2016 a las 15:40
11

Reuní un breve manual de depuración de Node.js sobre el uso del inspector de nodos para aquellos que no están seguros de por dónde empezar.

10

Visual Studio Code funcionará para nosotros en la depuración.

9

¡Utilice Webstorm! Es perfecto para depurar aplicaciones Node.js. Tiene un depurador incorporado. Consulte los documentos aquí: https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html

8

Si necesita una biblioteca de registro potente para Node.js, Tracer https://github.com/baryon/tracer es una mejor opción.

Genera mensajes de registro con una marca de tiempo, nombre de archivo, nombre de método, número de línea, ruta o pila de llamadas, soporte de consola de color y soporte de base de datos, archivo y transporte de flujo fácilmente. Yo soy el autor

0
8

Suponiendo que tiene instalado el inspector de nodos en su computadora (si no, simplemente escriba 'npm install -g node-inspector'), solo tiene que ejecutar:

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

Y pegue el URI de la línea de comando en un navegador WebKit (Chrome / Safari).

1
  • 1
    Nodo-inspector ya fue mencionado; tal vez eliminar esta respuesta? Dan Dascalescu 12/0214 a las 1:46
8

Solo para completar:

El complemento PyCharm 3.0 + Node.js ofrece una increíble experiencia de desarrollo + ejecución + depuración .

8

Inicie su proceso de nodo con la marca --inspect .

node --inspect index.js

y luego Abrir chrome://inspecten Chrome. Haga clic en el enlace "Abrir DevTools dedicadas para nodo" o instale esta extensión de Chrome para abrir fácilmente DevTools de Chrome.

Para obtener más información, consulte este enlace.

6

Existe el nuevo proyecto Nodeclipse de código abierto (como un complemento de Eclipse o Enide Studio ):

Nodeclipse se convirtió en el número 1 en Eclipse Top 10 NUEVOS complementos para 2013 . Utiliza un depurador V8 modificado (de Google Chrome Developer Tools para Java).

Nodeclipse es un software gratuito de código abierto que se lanza a principios de cada mes .

5

IntelliJ funciona maravillosamente para Node.js.

Además, IntelliJ es compatible con la 'Asistencia de código'.

5

Hay muchas posibilidades ...

El soporte de depuración a menudo se implementa mediante el Protocolo de depuración v8 o el Protocolo de depuración de Chrome más reciente .

4

El IDE de NetBeans ha tenido soporte para Node.js desde la versión 8.1 :

<...>

New Feature Highlights

Node.js Application Development

  • New Node.js project wizard
  • New Node.js Express wizard
  • Enhanced JavaScript Editor
  • New support for running Node.js applications
  • New support for debugging Node.js applications.

<...>

Referencias adicionales:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Aplicación Node.js Express en NetBeans IDE, Geertjan-Oracle .
4

Usa estos comandos

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
4

ndb es una experiencia de depuración mejorada para Node.js, habilitada por Chrome DevTools

https://github.com/GoogleChromeLabs/ndb

3
node-debug -p 8888 scriptFileName.js