Depurar sin Puntos de Interrupción

En un escenario típico de depuración, configurarías puntos de interrupción para indicarle al depurador cuándo suspender tu programa. Un punto de interrupción usualmente corresponde al momento que marca el punto de partida de la siguiente investigación.

Bueno, en algunas situaciones no estás seguro de dónde configurar un punto de interrupción. Otras veces, podrías preferir suspender el programa en un momento specifico en lugar de apuntar a una línea específica.

En este artículo, veremos la función Pause de IntelliJ IDEA - una técnica de depuración menos conocida, que puede ser extremadamente poderosa en algunos escenarios, incluyendo los descritos arriba. Discutiremos sus casos de uso y limitaciones, así como descubriremos el truco secreto de pasos.

¿Qué es Pausa?

Pause es una característica del depurador de IntelliJ IDEA que te permite suspender tu aplicación arbitrariamente en cualquier punto dado de tiempo. Para usarlo, no tienes que estar familiarizado con el código de la aplicación. ¡De hecho, puedes ignorarlo por completo!

Botón de Pause en la barra de herramientas del depurador Botón de Pause en la barra de herramientas del depurador

Para pausar un programa, haz clic en Pause en la barra de herramientas del depurador. Como resultado, el programa se suspende justo en medio de lo que está haciendo actualmente.

Limitaciones

A primera vista, un programa en pausa puede parecer exactamente igual al que ha sido suspendido en un punto de interrupción. Sin embargo, esto solo es cierto hasta cierto punto.

El depurador se ve igual, independientemente de si se usó Pausa o un punto de interrupción para suspender la aplicación El depurador se ve igual, independientemente de si se usó Pausa o un punto de interrupción para suspender la aplicación

Sería correcto considerar Pause una especie de volcado de hilo más. Aún puedes inspeccionar variables e hilos como normalmente lo harías. Sin embargo, algunas de las características más avanzadas, como Evaluate Expression, no funcionarán.

Casos de uso

Hay innumerables formas en las que puedes usar Pause. A menudo, se puede usar de manera intercambiable con los puntos de interrupción tradicionales. Pero también hay escenarios donde Pause encaja mejor. Consideremos un par de ellos.

Aplicaciones no responsivas

Si te encuentras con un bloqueo de UI, generalmente es porque el hilo de UI está bloqueado o haciendo algo pesado. Pause podría ser útil en ambos casos.

La pila del hilo de UI bloqueado muestra qué método está ejecutando actualmente La pila del hilo de UI bloqueado muestra qué método está ejecutando actualmente

Pausa la aplicación mientras está siendo no reactiva y examina la pila de llamadas del hilo de UI. A menudo, esto es suficiente para diagnosticar el problema.

Fuentes faltantes

Como dije antes, Pause te permite ignorar el código fuente. En realidad, ¡el código fuente bien podría estar completamente ausente para ti! Este escenario no es típico, pero cuando te encuentras con él, los puntos de interrupción no serían de ninguna ayuda.

… lo cual no es un problema para Pause.

meme de gato hehe

Bloqueos

Si sospechas un problema de sincronización, como un interbloqueo o un bloqueo en vivo, Pause podría ayudarte a encontrar los hilos y monitores exactos que están causando el problema.

La lista de hilos muestra cuáles hilos han terminado en un interbloqueo La lista de hilos muestra cuáles hilos han terminado en un interbloqueo

Pausa el programa e inspecciona la lista de hilos. Mostrará qué hilos están bloqueados. Navegando al punto de ejecución, también verás las secciones críticas en las que están bloqueadas. Esta información podría guiarte hacia una solución.

Truco Secreto de Pasos

Como señalé anteriormente, Pause de hecho limita tu acceso a algunas de las características avanzadas del depurador. Si has intentado usar ciertas características mientras una aplicación está en pausa, puedes haber visto un mensaje de error que dice Cannot evaluate methods after Pause action.

Un mensaje de error que dice 'No se pueden evaluar métodos después de la acción de Pausa' Un mensaje de error que dice 'No se pueden evaluar métodos después de la acción de Pausa'

Sin embargo, hay una solución para esta restricción.

Después de haber pausado una aplicación, procede realizando cualquier acción de paso. Step Into o Step Over servirá. Después de eso, te encontrarás en una sesión de depuración regular, que es similar a suspender una aplicación usando un punto de interrupción.

¡Ahora todas las características avanzadas están desbloqueadas!

Conclusión

¡Eso es todo por hoy! Espero que encuentres útiles estos consejos y trucos.

Si hay algo específico que quieres que cubra sobre la depuración de Java, no dudes en ¡contactar! Tus comentarios me ayudarán a priorizar y publicar el contenido que es más interesante para ti.

¡Nos vemos pronto!

all posts ->