Debugging de aplicaciones en Node.js

Debugging de aplicaciones en Node.js

Como desarrolladores siempre gastamos algo de tiempo revisando nuestras aplicaciones, básicamente haciendo debugging, sí, alrededor del 20% que te toma agregar una nueva característica, es destinado al debugging y lo hacemos para tratar de verificar errores o simplemente porque queremos estar seguros de que nuestro código funciona para el fin que fue creado, por esta razón es que las habilidades de debugging y el correcto entendimiento de éstas herramientas es crucial en un perfil de desarrollador ya que nadie quiere invertir mucho más tiempo fuera de ese 20% haciendo esta tarea.

Hablando específicamente de Node.js muchos developers quizás no lo sepan, pero Node.js viene con su propia librería para hacer debugging de forma interactiva desde la consola, habilitar esta funcionalidad es bastante sencillo, basta con ejecutar el comando node inspect antes del archivo e inmediatamente entrarán en modo debug de consola, he aquí un ejemplo:

$ node inspect main.js

Y al momento de ponerlo en marcha el código se detiene justo al iniciar el archivo y muestra en pantalla algo como lo siguiente:


> $ node inspect index.js
< Debugger listening on ws://127.0.0.1:9229/df7723a2-7e80-495f-a7bf-3d8410de432d
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in file:///Users/jack/Public/debugging-test/index.js:1
> 1 const path = require('path');
  2
  3 const imageTypes = ['.png', '.jpg', '.jpeg'];
debug>

Lo que significa que inmediatamente podemos empezar escribir comandos e ir verificando el estado de nuestra aplicación, digamos que si has utilizado Chrome para hacer debugging, los comandos que has visto de forma visual pueden ser accedidos de igual manera desde la consola, por mencionar algunos: watch, set breakpoint, next, step, run, restart, etc..

Puedes escribir help y presionar enter para ver la lista de comandos disponibles.

Ahora digamos que queremos poner un breakpoint en la línea 3, justo en la variable que contiene las extensiones permitidas, entonces para ello utilizaremos la función setBreakpoint y como parámetro usaremos un 3 que significa la línea 3 del archivo, presionan enter y automáticamente la ejecución del código y se detiene en la línea 3.


> $ node inspect index.js
< Debugger listening on ws://127.0.0.1:9229/df7723a2-7e80-495f-a7bf-3d8410de432d
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in file:///Users/jack/Public/debugging-test/index.js:1
  1 const path = require('path');
  2
> 3 const imageTypes = ['.png', '.jpg', '.jpeg'];
  4
  5 function isImage(filepath) {
  6   const filetype = path.extname(filepath);
  7   return imageTypes.includes(filetype);
  8 }
debug>

Hay muchos otros comandos como dije anteriormente, la idea es tener una experiencia de debugging completa no usando el navegador.

Ahora, si has prestado suficiente atención a la salida del debugger, notarás que el debugger habilita la escucha de comandos vía websockets en la dirección ws://localhost:9229/ y cualquier aplicación de la consola se puede hacer debugging utilizando Chrome también utilizando el comando --inspect-brk de Node.js y la secuencia de pasos para lograrlo es la siguiente:

Desde la consola de comandos


> $ node --inspect-brk index.js
Debugger listening on ws://127.0.0.1:9229/3d6ea6dd-f025-4654-97bc-83421c1fac7e
For help, see: https://nodejs.org/en/docs/inspector

Y una vez la aplicación en ejecución, debes abrir Chrome en cualquier pestaña activa, habilitar la consola de developer y verás un nuevo ícono de Node.js.

Que al hacerle click, abrirá una nueva instancia de la consola de developer, pero esta vez con el código de la aplicación, como en mi caso:

Y con esto ya no es necesario utilizar la consola, otra cosa importante es que no solamente se pueden debuggear aplicaciones en modo local, también se pueden agregar nuevas url para hacer debugging en remoto, aunque por omisión localhost siempre esta listo para funcionar.

Tip: también si utilizan Visual Studio Code pueden adjuntar el debugger del editor si no desean utilizar Chrome, escribiendo el comando "Attach to Node Process". (necesitaran tener instalada la extensión Debugger for Chrome)

Usando ndb

Ndb es una nueva aplicación para hacer debugging creada por Google que utiliza Puppeteer para iniciar Chrome Developer Tools, aunque esta nueva aplicación tiene algunas nuevas características, personalmente no la recomiendo en un ambiente de desarrollo ya que se descargará adicionalmente Chromium lo cual veo innecesario si ya tenemos Chrome o VSCode instalado.

Puedes instalarlo fácimente utilizando npm de forma global:

$ npm i -g ndb

Y una vez instalado, simplemente hay que adjuntar el comando ndb antes de node y el script que desees poner en marcha, recuerda que esto descargará Chromium, así es que la primera vez tenle algo de pasciencia dependiendo de tu conexión a internet.

$ ndb node main.js

Aprender a hacer debugging es una necesidad si quieres llegar a ser un buen desarrollador, no importa si hablamos sobre Node.js u otra plataforma de programación, las herramientas de debugging te ayudarán a entender mejor como funcionan tus aplicaciones y como mejorarlas también, espero que hayas disfrutado de este artículo.

Happy coding!


Photo by Jeff Nissen on Unsplash

Jack Fiallos

Jack Fiallos

Te gustó este artículo?