javascript visual ¿Cómo depuro las aplicaciones Node.js?




node-inspector (24)

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

Ahora mismo estoy utilizando 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?


Comience el proceso de su nodo con la bandera --inspect .

node --inspect index.js

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

Para más información consulte this enlace.



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

Registros de depuración

Afrontémoslo, a todos nos encanta una buena console.log('Uh oh, if you reached here, you better run.') y eso funciona muy bien, así que si eres reticente a moverte demasiado lejos, al menos agrega. Algunos bling a sus registros con la depuración de Visionmedia .

Depuración interactiva

Tan útil como el registro de la consola puede ser, para depurar profesionalmente, necesita remangarse y atascarse. Establezca puntos de interrupción, paso a través de su código, inspeccione los ámbitos y las variables para ver qué está causando ese extraño comportamiento. Como otros han mencionado, node-inspector es realmente las rodillas de las abejas. Hace todo lo que puede hacer con el depurador incorporado, pero utilizando esa interfaz familiar de Chrome DevTools. Si, como yo, usas Webstorm , here tienes una guía práctica para depurar desde allí.

Trazas de pila

De forma predeterminada, no podemos rastrear una serie de operaciones en diferentes ciclos del bucle de eventos (tics). Para solucionar 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, echa un vistazo a

Si tienes ganas de ver un video (s) entonces

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

Es algo doloroso
Para ver tu propio problema y saberlo.
Que tú mismo y nadie más lo haya hecho.

Sófocles, ajax


node-inspector podría salvar el día! Úsalo desde cualquier navegador que soporte WebSocket . Puntos de interrupción, perfilador, codificación en tiempo real, etc. Es realmente impresionante.

Instalalo con:

npm install -g node-inspector

Entonces corre:

node-debug app.js

El código de Visual Studio será mi elección para la depuración. No hay gastos generales de instalación de herramientas o npm install cosas. Simplemente configure el punto de inicio de su aplicación en package.json y VSCode creará automáticamente un archivo de configuración dentro de su solución. Se basa en Electron , en el que se construyen editores como Atom.

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


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




Depuración

Perfilado

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

Heapdumps

Flamegraphs

Rastreo

Explotación florestal

Bibliotecas que generan información de depuración

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

Benchmarking

Otro

Legado

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



Si está utilizando el IDE de Atom , puede instalar el paquete de node-debugger del node-debugger .



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

Un depurador visual multiplataforma de código abierto.

Instalación:

npm install iron-node -g;

Depurar:

iron-node yourscript.js;


Si necesita una biblioteca de registro potente para Node.js, Tracer es una mejor opción.

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



Asumiendo que tiene el inspector de nodos instalado 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 comandos en un navegador WebKit (Chrome / Safari).


pry.js una pequeña herramienta llamada pry.js que puede ayudarte.

Coloque una declaración simple en algún lugar de su código, ejecute su secuencia de comandos normalmente y el nodo detendrá el hilo actual que le dará acceso a todas sus variables y funciones. Ver / editar / eliminarlos a voluntad!

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

Visual Studio Code tiene un excelente 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 puedes depurar tareas de gruñido y trago , en caso de que necesites ...



Yo usaría GOOD by Walmart Labs. Hará el trabajo, y es muy flexible:

var hapi = require('hapi');
var good = require('good');
var server = hapi.createServer('localhost', 5000,{});
server.route({SOME ROUTE HERE});
server.start();

var options = {
subscribers: {
    'console':               ['ops', 'request', 'log', 'error'],
    'http://localhost/logs': ['log']
    }
};
server.pack.require('good', options, function (err) {

    if (!err) {
        console.log('Plugin loaded successfully');
    }
});

node-debug -p 8888 scriptFileName.js

IntelliJ funciona maravillosamente para Node.js.

Además, IntelliJ apoya bien el 'Código de Asistencia'.



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

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

Mis únicos 'temas' / artículos de la lista de deseos son eran :

  1. Parece tener más hambre de recursos en Mac que en Windows Ya no parece un problema en la versión 6.
  2. Sería bueno si tuviera soporte para Snippets (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 las plantillas en vivo también tiene soporte de fragmentos.




google-chrome-devtools