¿Cómo depuro aplicaciones Node.js?

1578

¿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 manera de depurar. Sé que Google Chrome tiene un depurador de línea de comandos. ¿Este depurador también está disponible para Node.js?

Fabian Jakobs
fuente
3
Puede usar Locus para la inyección de línea de comando.
Ali Davut
55
Si desea depurar con el enfoque IDE tradicional, use vscode use vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578
44
Este artículo me ha parecido muy interesante y me funciona bien: depurar Node.js con Chrome DevTools . Espero que ayude :)
Timbergus
2
"alerta de depuración" :)
The Red Pea
Tenga en cuenta que debe ejecutar asentir con --inspect-brkINSTEAD OF --inspectsi desea depurar el código del servidor real en el momento de la carga. Ver stackoverflow.com/questions/59596138
Jorge Orpinel

Respuestas:

1261

inspector de nodos podría salvar el día! Úselo desde cualquier navegador que admita WebSocket . Puntos de interrupción, perfilador, codificación en vivo, etc. Es realmente increíble.

Instalarlo con:

npm install -g node-inspector

Entonces corre:

node-debug app.js
daralthus
fuente
14
El inspector de nodos de deseo estaba activo. El componente de creación de perfiles necesita algo de amor.
Jonathan Dumaine
13
Desafortunadamente para mí, el inspector de nodos no funciona con las últimas versiones de Node.js y no ha admitido el inicio de sesión en la consola del navegador desde la v0.1. codeinnodo fue simplemente defectuoso. Entonces, escribí mi propio módulo para ayudar con la depuración permitiéndole volcar objetos y cosas así en la consola de su navegador web. Pensé que podría ser de utilidad para otra persona: nodo-mono . Además, funciona tanto en Firefox como en Chrome.
Justin Warkentin
77
Dado que esta era una herramienta aparentemente increíble y popular, ¿seguramente el hecho de que el autor original haya admitido que ya no tienen los recursos para mantenerla no sería un problema ya que la comunidad de código abierto podría recogerlo?
PeterT
34
Ahora StrongLoop mantiene activamente el inspector y está trabajando nuevamente con la última versión (0.3) ¡yay! Anuncio aquí: blog.strongloop.com/…
balupton
21
"Desde la versión 6.3, Node.js proporciona un depurador integrado basado en DevTools que en gran medida desprecia a Node Inspector, consulte, por ejemplo, esta publicación de blog para comenzar. El depurador incorporado es desarrollado directamente por el equipo de V8 / Chromium y proporciona ciertas funciones avanzadas características (por ejemplo, trazas de pila largas / asíncronas) que son demasiado difíciles de implementar en Node Inspector ". - dice el repositorio del inspector de nodos
ThisClark
750

Depuración

Perfilado

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

Heapdumps

Flameógrafos

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

Suelen funcionar pero ya no se mantienen o ya no son aplicables a las versiones modernas de nodos.

Balupton
fuente
8
Acerca de Nodetime: para aquellos que no desean enviar sus datos a los servidores de timetime hay una "alternativa" local (todavía se basa en nodetime), el lookmódulo, como se señala en stackoverflow.com/questions/12864221/nodejs-memory- perfilado
reallynice
No encuentro que los informes de la CPU de nodetime sean muy útiles: 1. Acabo de obtener un árbol de métodos, sin tiempo 'self'. 2. Parece que las ramas de los árboles se recortan por debajo de un cierto número de porcentajes. Esos 2 hacen que sea muy difícil entender dónde pasa la CPU la mayor parte del tiempo.
shacharz
npm install -g profiler se queja de la falta de Python en Windows 7. Intenté configurar python = C: \ Python34 \, pero esto produce un bloqueo.
Stepan Yakovenko
El único generador de perfiles que funciona fuera de la caja es nodetime. Pero su seguimiento de pila de perfiles de CPU no se puede usar (no proporciona suficientes detalles). Las herramientas de Nodejs 4 msvc 2012 también tienen un generador de perfiles, pero también ha informado de errores críticos no corregidos ...
Stepan Yakovenko
El único generador de perfiles que funcionó para mí fue nprof+ v8.logde node --prof.
Dan Abramov
253

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

Fabian Jakobs
fuente
12
Estoy interesado, después de la presentación en Google IO que hicieron Paul Irish y Pavel, ¿es posible depurar node.js directamente a Chrome Developer Tools sin la necesidad de eclipse?
balupton
+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.
Barista aficionado
También viene dentro de Nodeclipse nodeclipse.org (con algunos errores relacionados con Node.js corregidos)
Paul Verest
Mi entrada en este campo es trepanjs ( npmjs.com/package/trepanjs ). Tiene toda la bondad del depurador de nodos, pero se ajusta mejor a gdb. También tiene más funciones y comandos como resaltado de sintaxis, ayuda en línea más extensa y una evaluación más inteligente. Visite github.com/rocky/trepanjs/wiki/Cool-things para conocer algunas de sus características interesantes.
rocoso
1
La función está actualmente disponible en las versiones nocturnas. Echa un vistazo aquí para obtener instrucciones:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone
191

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 al inspector:

node --inspect server.js

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

Alister
fuente
2
No para descartar los pasos anteriores, sino solo para compartir ... Intenté crear un contenedor que sea un poco más robusto y fácil de instalar. Ver: github.com/jaridmargolin/inspect-process
R. Margolin
1
@ JaridR.Margolin Nice. Actualicé la respuesta para usar eso en su lugar. Mucho más fácil de configurar y funciona mejor :)
gregers
2
Esta respuesta está actualmente en la parte inferior y es la única que realmente me ha funcionado. ¡Esto es increíble!
LOAS
3
En caso de que ayude a alguien, lancé un video explicando este proceso en youtu.be/rtZKUnks6jI .
RoccoB
2
¿De dónde sacaste el tema oscuro para las herramientas de desarrollador de Chrome?
Pieter Meiresone
93

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

node debug script.js

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

JulianW
fuente
1
¿Tiene algún enlace a la documentación de cómo usarlo?
Fabian Jakobs
2
No tengo documentos recién actualizado a v0.3.5. poner una línea "depurador"; en su código que actuará como punto de quiebre. Funciona como ndb / gdb. después de hacer "node debug script.js" escriba ayuda. Verá el comando que admite. p = imprimir, l = lista ... así que no necesitas escribir el mundo completo
JulianW
2
Tenga en cuenta que en Windows es "node.exe --debug myscript.js" pero aún no funciona.
Marc
66
Es probable que tenga que cambiar --debuga debugsin los guiones. Así es como finalmente lo puse a trabajar. Es confuso --debugy debughacer dos cosas diferentes.
benekastah
¿Cómo se ejecuta realmente el programa? "r -> app is already running...", cuando trato de continuar y me encuentro con una declaración que está tratando de obtener información, me devuelve el mensaje de depuración en lugar de permitirme ingresar la información que se requiere.
Michael
70

Visual Studio Code será mi elección para la depuración. Sin gastos generales de instalación de herramientas onpm installcosas. Simplemente configure 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. Está construido sobre Electron , en el que se basan editores como Atom.

VS Code brinda una experiencia de depuración similar a la que podría haber tenido en otros IDE como VS, Eclipse, etc.

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

Shreyas
fuente
Es genial pero tiene un retraso. Por eso prefiero Sublime alguna vez.
calbertts
3
pero sublime no tiene un depurador, y creo que el código VS también es bastante rápido
Syed Faizan
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
siempre me pide una carpeta de configuración, no funciona de
inmediato
@carkod habilite la preferencia de conexión automática de código vs y use la terminal de código vs para iniciar su script, ex nodo --inspect file-name.js
Vipul Dessai
57

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 múltiples sistemas operativos y tiene la depuración 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 son fueron :

  1. Parece tener más recursos en Mac que Windows Ya no parece un problema en la versión 6.
  2. Sería bueno si tuviera soporte Snippet (como los de Sublime Text 2 , es decir, escriba 'diversión' y toque 'pestaña' para poner una función. Vea el comentario de @WickyNilliams a continuación: con Live Templates también tiene soporte de fragmentos.
isNaN1247
fuente
10
webstorm tiene soporte para fragmentos BTW ;-) aunque se conocen como "Plantillas en vivo" en lugar de fragmentos.
WickyNilliams
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
42

Muchas respuestas geniales aquí, pero me gustaría agregar mi punto de vista (basado en cómo evolucionó mi enfoque)

Registros de depuración

Seamos realistas, a todos nos encanta un bien 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, al menos agrega un poco de brillo a tus registros con la depuración de Visionmedia .

Depuración interactiva

A pesar de lo útil que puede ser el registro de la consola, para depurar profesionalmente debe arremangarse y quedarse atrapado. Establezca puntos de interrupción, recorra su código, inspeccione los ámbitos y las variables para ver qué está causando ese comportamiento extraño. Como otros han mencionado, el inspector de nodos realmente es la rodilla de las abejas. Hace todo lo que puede hacer con el depurador incorporado, pero usando esa interfaz familiar de Chrome DevTools. Si, como yo, usa Webstorm , aquí hay una guía práctica para depurar desde allí.

Rastros de pila

Por defecto, no podemos rastrear una serie de operaciones en diferentes ciclos del ciclo 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 ha surgido algunas fugas desagradables? Use heapdump y Chrome DevTools para comparar algunas instantáneas y ver qué está cambiando.


Para algunos artículos útiles, consulte

Si tienes ganas de ver un video (s) entonces

Cualquiera sea el camino que elija, solo asegúrese de comprender cómo está depurando

ingrese la descripción de la imagen aquí

Es algo doloroso
mirar tus propios problemas y saber
que usted mismo y nadie más lo ha logrado.

Sófocles, Ajax

Philip O'Brien
fuente
41

Theseus es un proyecto de Adobe Research que le permite depurar su código Node.js en sus corchetes del 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

Sindre Sorhus
fuente
esto es bastante bueno, todavía no sé qué es Backtrace para ellos
misaxi
Actualmente estoy amando a Theseus, pero todavía tengo algunos problemas en los que necesito establecer un punto de interrupción y rastrearlo. Actualmente tengo que eliminar mi aplicación, iniciar el nodo con --debug, rastrear a través y luego iniciar la aplicación con node-theseus. ¿Es posible usar Teseo con puntos de interrupción? He intentado buscar en la página de GitHub, StackOverflow y foros, pero hasta ahora no he tenido suerte. ¿Me estoy perdiendo de algo?
Eugene
25

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

John81
fuente
23

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

Incluso puede depurar tareas de gruñidos y tragos , si necesita ...

Hans
fuente
1
A partir de Visual Studio Code 8.0, el soporte de depuración para OSX y Linux se volvió realmente bueno.
bgse
Después de pasar toda una noche haciendo que el inspector de nodos y el bucle fuerte funcionen bajo Windows (Visual Studio Community, degradar a npm 2, instalar python, variables env, usar cmd no babun / cygwin, etc.) y luego jugar con esto durante una hora , tengo que decir que esta es la mejor opción, al menos en las ventanas y, posiblemente, en general (si no tiene webstorn)
dashambles
22

Escribí un enfoque diferente para depurar el código 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;

Stephan Ahlf
fuente
15

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

Uchiha Itachi
fuente
15

Uso de la versión de Chrome 67.0.3396.62 (+)

  1. Ejecutar aplicación de nodo

nodo --inspect-brk = 0.0.0.0: 9229 server.js (nombre de archivo del servidor js)

  1. Explore su aplicación en Chrome, por ejemplo, "localhost: puerto"
  2. Abre 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 la aplicación de nodo de depuración.

ingrese la descripción de la imagen aquí

babidi
fuente
13

Creé una herramienta pequeña y ordenada 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 y le dará acceso a todas sus variables y funciones. Ver / editar / eliminarlos 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()
Blaine
fuente
11

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

yojimbo87
fuente
Cloud 9 es el camino a seguir para mí, especialmente ofrece la opción de libertad de código en cualquier lugar sin llevar mi computadora portátil.
Teoman shipahi
8

Comience su proceso de nodo con --inspect flag.

node --inspect index.js

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

Para más información consulte este enlace

Rahul Kumar
fuente
7

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

Produce 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, transporte de flujo fácilmente. Yo soy el autor

Baryon Lee
fuente
7

Suponiendo que tenga 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 desde la línea de comando en un navegador WebKit (Chrome / Safari).

Shaheen Ghiassy
fuente
1
el inspector de nodos ya fue mencionado; tal vez borrar esta respuesta?
Dan Dascalescu
5

IntelliJ funciona maravillosamente para Node.js.

Además, IntelliJ admite bien la 'Asistencia de código'.

卢 声 远 Shengyuan Lu
fuente
4

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

<...>

Nuevas características destacadas

Desarrollo de aplicaciones Node.js

  • Nuevo asistente de proyecto Node.js
  • Nuevo asistente de Node.js Express
  • Editor de JavaScript mejorado
  • Nuevo soporte para ejecutar aplicaciones Node.js
  • Nuevo soporte para depurar aplicaciones Node.js.

<...>

Referencias adicionales:

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

Usa estos comandos

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

Una forma rápida y sucia de depurar pequeños scripts de Node.js con su depurador de navegador favorito sería usar browserify . Tenga en cuenta que este enfoque no funciona con ninguna aplicación que requiera bibliotecas de E / S nativas, pero es lo suficientemente bueno para la mayoría de los scripts pequeños.

$ npm install -g browserify

Ahora mueva todas sus var x = requires('x')llamadas a un requires.jsarchivo y ejecute:

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

(La desventaja aquí es que debes mover o comentar requiresen todos tus archivos).

Incluya el bundle.jsen un archivo HTML de esta manera:

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

Ahora cargue el archivo en su navegador y presione F12y viola: depurar en el navegador.

Gerold Meisinger
fuente