Command Palette

Search for a command to run...

Statement debugger para Pausa Programática

Aprende a usar la palabra clave debugger para pausar la ejecución programáticamente. Domina el debugging interactivo con breakpoints dinámicos en JavaScript.

Lectura: 10 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • debugger pausa la ejecución cuando las DevTools están abiertas
  • Es ideal para debugging de código complejo o difícil de reproducir
  • Funciona en navegadores y Node.js (con --inspect)
  • Puede usarse condicionalmente para debugging específico
  • Nunca dejes debugger en código de producción

Introducción al Statement debugger

El statement debugger es una palabra clave en JavaScript que pausa la ejecución del código en ese punto exacto, permitiéndote inspeccionar variables, el stack trace y el estado de la aplicación en tiempo real. Es como un breakpoint programático que puedes activar o desactivar sin necesidad de configurar breakpoints en el IDE.

A diferencia de los breakpoints que configuras en las DevTools o en tu IDE, el statement debugger está incrustado directamente en tu código. Esto lo hace ideal para debugging de código complejo, situaciones difíciles de reproducir, o cuando necesitas pausar la ejecución en condiciones específicas que son difíciles de capturar con breakpoints tradicionales.

  • <strong>debugger</strong> - Pausa la ejecución en ese punto
  • <strong>Condicionales</strong> - debugger solo si se cumple una condición
  • <strong>DevTools</strong> - Requiere que las DevTools estén abiertas
  • <strong>Node.js</strong> - Funciona con el flag --inspect
  • <strong>Producción</strong> - Nunca dejar debugger en producción

Requiere DevTools abiertas

El statement debugger solo funciona si las DevTools del navegador están abiertas. Si las DevTools están cerradas, el statement se ignora y la ejecución continúa normalmente. Esto lo hace seguro para debugging sin afectar el rendimiento en producción (siempre que lo elimines antes del despliegue).

Sintaxis Básica

La sintaxis del statement debugger es extremadamente simple: solo escribes la palabra clave debugger en tu código donde quieres que se pause la ejecución. No requiere paréntesis, argumentos o ninguna otra sintaxis especial. Cuando el motor de JavaScript encuentra esta palabra clave y las DevTools están abiertas, la ejecución se pausa automáticamente.

debugger-basico.js
Loading code...

Este ejemplo muestra cómo usar el statement debugger para pausar la ejecución en diferentes puntos de una función. Cuando el código se ejecuta con las DevTools abiertas, la ejecución se pausa en cada statement debugger, permitiéndote inspeccionar las variables y el estado de la función en ese momento exacto.

Control de ejecución

Cuando la ejecución se pausa en un statement debugger, puedes usar los controles de las DevTools para continuar (F8), step over (F10), step into (F11), o step out (Shift+F11). Esto te permite controlar exactamente cómo continúa la ejecución y qué partes del código quieres examinar en detalle.

Uso Práctico

El statement debugger es especialmente útil en situaciones donde los breakpoints tradicionales son difíciles de usar o insuficientes. Esto incluye debugging de código generado dinámicamente, callbacks complejos, eventos que ocurren en momentos específicos, o cuando necesitas pausar la ejecución en condiciones que dependen del estado de la aplicación.

Debugging de Callbacks

Los callbacks pueden ser difíciles de debuggear porque la ejecución salta entre diferentes funciones y contextos. El statement debugger te permite pausar la ejecución exactamente donde el callback se ejecuta, lo que facilita entender el flujo de ejecución y el estado de las variables en ese momento.

debugger-callbacks.js
Loading code...

Este ejemplo muestra cómo usar debugger para debugging de callbacks anidados. Cada callback tiene un statement debugger que pausa la ejecución cuando se ejecuta, permitiéndote inspeccionar el estado de las variables y entender el flujo de ejecución a través de los diferentes callbacks.

Debugging de Eventos

Los eventos del DOM pueden ser difíciles de debuggear porque ocurren en momentos específicos y a menudo en respuesta a acciones del usuario. El statement debugger te permite pausar la ejecución exactamente cuando se dispara un evento, lo que facilita entender qué causó el evento y qué estado tenía la aplicación en ese momento.

debugger-eventos.js
Loading code...

Este ejemplo muestra cómo usar debugger para debugging de eventos del DOM. Cuando el evento click se dispara, la ejecución se pausa en el statement debugger, permitiéndote inspeccionar el objeto del evento, el elemento que recibió el click, y el estado de la aplicación en ese momento.

Debugging de Loops

Los loops pueden ser difíciles de debuggear, especialmente cuando tienen muchas iteraciones o cuando el problema ocurre en una iteración específica. El statement debugger te permite pausar la ejecución en iteraciones específicas, lo que facilita identificar qué iteración está causando el problema.

debugger-loops.js
Loading code...

Este ejemplo muestra cómo usar debugger condicionalmente en un loop para pausar la ejecución solo en iteraciones específicas. Esto es especialmente útil cuando tienes un loop con muchas iteraciones y el problema ocurre solo en una iteración específica.

Debugging Condicional

Una de las características más poderosas del statement debugger es que puedes usarlo condicionalmente. Esto te permite pausar la ejecución solo cuando se cumple una condición específica, lo que es invaluable cuando estás debugging problemas que ocurren solo en ciertas circunstancias.

debugger-condicional.js
Loading code...

Este ejemplo muestra cómo usar debugger condicionalmente para pausar la ejecución solo cuando se cumplen condiciones específicas. Esto es especialmente útil cuando estás debugging problemas que ocurren solo con ciertos valores de variables o en ciertas circunstancias que son difíciles de reproducir.

  • <strong>if (condicion) debugger</strong> - Pausa solo si la condición es verdadera
  • <strong>debugger con lógica</strong> - Combina con operadores lógicos
  • <strong>Iteraciones específicas</strong> - Pausa solo en ciertas iteraciones
  • <strong>Valores específicos</strong> - Pausa solo con ciertos valores
  • <strong>Estados específicos</strong> - Pausa solo en ciertos estados

Evita condiciones complejas

Las condiciones complejas en los statements debugger pueden afectar el rendimiento de tu código. Usa condiciones simples y directas. Si necesitas condiciones muy complejas, considera usar console.assert() o console.log() en su lugar.

Debugging de Código Asíncrono

El debugging de código asíncrono puede ser especialmente desafiante porque el flujo de ejecución no es lineal. El statement debugger funciona con código asíncrono, pero es importante entender cómo interactúa con Promesas, async/await y callbacks para usarlo efectivamente.

Debugging de Promesas

Las Promesas pueden ser difíciles de debuggear porque la ejecución salta entre diferentes partes del código de manera asíncrona. El statement debugger te permite pausar la ejecución en diferentes puntos de una Promesa, facilitando entender el flujo de ejecución asíncrono.

debugger-promesas.js
Loading code...

Este ejemplo muestra cómo usar debugger para debugging de Promesas. Los statements debugger pausan la ejecución en diferentes puntos de la Promesa: cuando se crea, cuando se resuelve, y cuando se maneja el resultado. Esto facilita entender el flujo de ejecución asíncrono y el estado de las variables en cada punto.

Debugging de async/await

async/await hace que el código asíncrono se vea más síncrono, pero el debugging sigue siendo desafiante porque la ejecución puede pausarse en cualquier punto await. El statement debugger te permite pausar la ejecución exactamente donde necesitas inspeccionar el estado.

debugger-async-await.js
Loading code...

Este ejemplo muestra cómo usar debugger con async/await. Los statements debugger pausan la ejecución en diferentes puntos de la función async, permitiéndote inspeccionar el estado de las variables antes y después de cada await, lo que facilita entender el flujo de ejecución asíncrono.

Errores Comunes

Estos son los errores más frecuentes que encontrarás al trabajar con el statement debugger, especialmente cuando estás aprendiendo a usarlo o cuando lo usas en situaciones complejas.

Error: Dejar debugger en código de producción

El error más común y peligroso es dejar statements debugger en el código que se despliega a producción. Esto puede pausar la ejecución de tu aplicación en el navegador de los usuarios, causando una mala experiencia y potencialmente exponiendo información sensible.

error-debugger-produccion.js
Loading code...

La solución es siempre eliminar todos los statements debugger antes de desplegar a producción. Usa herramientas como ESLint para detectar statements debugger olvidados, y considera usar una función de logging personalizada que solo active debugger en desarrollo.

ESLint para detectar debugger

Configura ESLint con la regla "no-debugger" para detectar automáticamente statements debugger en tu código. Esta regla marcará cualquier statement debugger como un error, lo que te ayuda a evitar dejarlos en producción. En el archivo de configuración de ESLint, agrega la regla no-debugger como error.

Error: Debugger no funciona con DevTools cerradas

Otro error común es esperar que el statement debugger funcione cuando las DevTools están cerradas. El statement debugger solo funciona si las DevTools están abiertas, lo que puede causar confusión si no lo sabes y esperas que la ejecución se pause.

error-devtools-cerradas.js
Loading code...

La solución es siempre abrir las DevTools antes de ejecutar código con statements debugger. Si necesitas debugging que funcione independientemente de las DevTools, usa console.log(), console.assert() u otros métodos de logging en su lugar.

Error: Demasiados statements debugger

Es común poner statements debugger en demasiados lugares cuando estás debugging código complejo. Esto puede hacer que el debugging sea lento y frustrante porque tienes que continuar la ejecución en cada breakpoint, lo que interrumpe tu flujo de trabajo.

error-demasiados-debuggers.js
Loading code...

La solución es usar statements debugger estratégicamente, solo en los puntos clave donde necesitas inspeccionar el estado. Usa console.log() para información general y reserva debugger para puntos específicos donde necesitas inspección detallada del estado.

Resumen: Statement debugger

Conceptos principales:

  • debugger pausa la ejecución cuando DevTools están abiertas
  • Funciona en navegadores y Node.js (con --inspect)
  • Puede usarse condicionalmente para debugging específico
  • Es ideal para debugging de callbacks y eventos
  • Funciona con código asíncrono (Promesas, async/await)

Mejores prácticas:

  • Siempre elimina debugger antes de desplegar a producción
  • Usa ESLint con la regla no-debugger para detectar olvidos
  • Usa debugger condicionalmente para debugging específico
  • Combina debugger con console.log() para debugging efectivo
  • Abre DevTools antes de ejecutar código con debugger