Depurando en Node.js

Creo que la depuración es una parte tan crucial dentro del ciclo de desarrollo como cualquier otra. Así que siempre es una muy buena idea el desmitificar la tarea de depuración, haciéndola más sencilla y más productiva para poder terminar los proyectos a tiempo y reducir el estrés.

Al igual que la mayoría de los lenguajes, Node cuenta con unas excelentes herramientas para depurar que encuentran fácilmente errores e incongruencias en el código. Siempre he defendido el uso de un debugger porque creo que al utilizarlos elimina la necesidad de depender de ayudas externas y, sinceramente, nos hace mejores desarrolladores en general.

Esta guía está dirigida a los desarrolladores y administradores que trabajan actualmente Node. Se presupone una comprensión fundamental del lenguaje a nivel práctico.

Utilizando el debugger

Node.js incluye un servicio de depuración súper completo accesible mediante un simple protocolo TCP y un debugger cliente incorporado.

Por ejemplo, para utilizar el debugger y depurar un archivo llamado script.js, sólo debes llamar al nodo utilizando el flag debug tal que así:

$ node debug script.js
< debugger listening on port 5858
connecting... ok
debug>

Puntos de ruptura

Ahora que has iniciado una sesión de depuración, cualquier parte del script donde llames a “debugger” será un punto de ruptura para el debugger.

Así, por ejemplo, vamos a añadir una declaración debugger dentro del script.js:

foo = 2;
setTimeout(() => {
  debugger;
  console.log('bugger');
}, 1000);
console.log('de');

Bien, si ejecutamos este script, se llamará al debugger en nuestro punto de ruptura y podremos gestionar el control del script mediante los comandos cont o next (c o n si quieres abreviar).

Podemos pausar la ejecución de este script cuando queramos utilizando p.

$ node debug script.js
< debugger listening on port 5858
connecting... ok
break in /home/tom/web/envatodebug/myscript.js:1
  1 foo = 5;
  2 setTimeout(() => {
  3   debugger;
debug> cont
< de
break in /home/tom/web/envatodebug/myscript.js:3
  1 foo = 5;
  2 setTimeout(() => {
  3   debugger;
  4   console.log('bugger');
  5 }, 1000);
debug> next
break in /home/tom/web/envatodebug/myscript.js:4
  2 setTimeout(() => {
  3   debugger;
  4   console.log('bugger');
  5 }, 1000);
  6 console.log('de');
debug> next
< bugger
break in /home/tom/web/envatodebug/myscript.js:5
  3   debugger;
  4   console.log('bugger');
  5 }, 1000);
  6 console.log('de');
  7
debug> quit

REPL

$ node debug script.js
< debugger listening on port 5858
connecting... ok
debug> repl
Press Ctrl + C to leave debug repl
> foo
2
> 2+2
4

El Read-Eval-Print-Loop o REPL del debugger te permite introducir código de manera interactiva durante la ejecución, y así acceder al estado de la aplicación y de todas las variables y métodos en el punto exacto donde se ha interrumpido. Esta es una herramienta muy poderosa que puedes usar para eliminar cualquier error de tu aplicación.

En general, el REPL está disponible como herramienta independiente y como parte del debugger, y te permite ejecutar JavaScript de forma interactiva. Por ejemplo, sólo tienes que escribir node en el prompt sin ninguna opción más, y tendrás una interfaz en la que podrás escribir código y ver la salida.

Un pasito p'alante, un pasito p'atrás

Como os he dicho antes, los comandos cont y next (c y n) nos permiten continuar la ejecución del código una vez has llegado a un punto de ruptura. Además de esto, a medida que avancemos a través del código también podremos entrar en un método o salir de su ámbito padre.

Utiliza los comandos step para entrar o avanzar y out para salir, o s y o para abreviar.

Backtracing

Utiliza backtrace o bt para obtener una salida de la traza para el marco de la ejecución actual.

Reinicio

Utiliza restart o r para reiniciar el script desde el comienzo de la ejecución.

Formas alternativas de conectarnos al debugger

Los usuarios avanzados pueden acceder al debugger también iniciando Node.js con el comando --debug, o alternativamente mediante un proceso existente en Node.js con SIGUSR1.

Una vez que se ha establecido un proceso en el modo de depuración de esta manera, puedes conectarlo utilizando el debugger de Node.js, ya sea utilizando el pid del proceso que se está ejecutando o vía referencia URI (por ejemplo localhost:puerto):

node debug -p < pid > conecta con el proceso a través del pid.
node debug < URL > conecta con el proceso a través de una URL como localhost:5858.

Fuente: Tom Whitbread

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP