Depuración y diagnóstico

El proceso de depuración en Node.js debe empezar en modo Inspect que expone un protocolo remoto que puede ser conectado y permite diagnosticar a través de puntos de interrupción.

Objetivos

  • Iniciar un proceso en modo inspect.

  • Conectar un proceso en modo inspect para depurarlo.

  • Comprender que son los breakpoints (puntos de ruptura o interrupción).

Inicio de modo inspección

Node.js soporta el protocolo de depuración remota como chrome DevTools.

Para activar el modo inspección: node --inspect index.js

Activar el modo inspección pero iniciando con un breakpoint activo (Inspect Break mode) al inicio del programa: node --inspect-brk index.js

Si no utilizamos los flags anteriores, la aplicación se inicializará por completo y estará realizando tareas asíncronas antes de que pueda establecer los breakpoints.

Ejemplo utilizando Chrome Devtools:

Vamos a crear un pequeño programa con el algoritmo recursivo de fibonacci.

Ejecutamos en modo inspección:

Después de ejecutar el comando node --inspect-brk index.js, el protocolo de depuración remota utiliza WebSockets (ws://), y así es como Chrome detectará que el depurador está escuchando automáticamente.

Abrimos Chrome e ingresamos a chrome://inspect/#devices:

Click en inspect y nos abrirá una instancia DevTools que está conectada con el proceso de Node:

Para mayor información acerca de otras herramientas para depurar: https://nodejs.org/en/docs/guides/debugging-getting-started/

Si deseamos que haga una pausa en excepciones detectadas, debemos dar click en "Pause on caught exceptions":

Agreguemos un breakpoint y veamos el comportamiento del call stack:

Después de agregar el breakpoint con un click sobre la línea que deseamos evaluar, y damos click en el primer botón (azul), se reanudará la ejecución del programa e iniciará la trazabilidad de ejecución en el panel de call stack.

En algunos casos se puede agregar un breakpoint directamente en el código, utilizando el flag --inspect, y agregándole en el código la declaración debugger (línea 5):

Last updated

Was this helpful?