Depuración remota con IntelliJ IDEA

1. Introducción

La depuración remota brinda a los desarrolladores la capacidad de diagnosticar errores únicos en un servidor u otro proceso. Proporciona los medios para rastrear esos molestos errores en tiempo de ejecución e identificar cuellos de botella de rendimiento y sumideros de recursos.

En este tutorial, veremos la depuración remota usando JetBrains IntelliJ IDEA. Preparemos primero nuestra aplicación de muestra modificando la JVM.

2. Configure la JVM

Usaremos una aplicación de muestra del programador Spring para conectarnos fácilmente y agregar puntos de interrupción a una tarea programada regularmente.

Además, IntelliJ IDEA proporciona nuestros parámetros de JVM como parte de la configuración :

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

2.1. Parámetros de JVM

Además de la configuración del Java Debug Wire Protocol (JDWP) - jdwp = transport = dt_socket - vemos los parámetros de servidor , suspensión y dirección .

El parámetro del servidor configura la JVM como destino de nuestro depurador. El parámetro de suspensión le dice a la JVM que espere a que un cliente depurador se conecte antes del inicio. Finalmente, el parámetro de dirección usa un host comodín y un puerto declarado.

Entonces, construyamos la aplicación del programador:

mvn clean package

Y ahora iniciemos la aplicación, incluido el parámetro -agentlib: jdwp :

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \ target/gs-scheduling-tasks-0.1.0.jar

Abre cualquier terminal y ejecuta el comando. Con nuestra aplicación iniciada, cambiemos ahora a IntelliJ.

3. Ejecute la configuración en IntelliJ IDEA

A continuación, en IntelliJ, creamos una nueva configuración de ejecución para la depuración remota:

Ahora que nuestra aplicación se está ejecutando, comencemos la sesión de depuración remota haciendo clic en el botón Depurar .

4. Depuración remota

A continuación, abrimos el archivo ScheduleTask y colocamos un punto de interrupción en la línea 36 que se muestra aquí:

public void reportCurrentTime() { log.info("The time is now {}", dateFormat.format(new Date())); }

Dado que la tarea se ejecuta cada cinco segundos, se detendrá poco después de que se agregue. Como resultado, ahora podemos recorrer toda la aplicación.

Por problemas de las aplicaciones de inicio, cambiamos el suspender la bandera a n y colocamos un punto de interrupción en el principal método de aplicación.

4.1. Limitaciones

A veces, el registro y la salida nos confunden cuando se realiza una depuración remota. Los registros no se enviarán a la consola del IDE, por lo que se puede utilizar un archivo de registro externo y asignarlo al IDE para una capacidad de depuración más sólida.

Recuerde también que, si bien la depuración remota es una herramienta muy poderosa, un entorno de producción no es un objetivo adecuado para la depuración .

5. Conclusión

Como cubrimos en este artículo, la depuración remota con IntelliJ es fácil de configurar y usar en unos pocos pasos.

Analizamos cómo configurar nuestra aplicación JVM para la depuración, así como algunas limitaciones de esta importante herramienta en nuestra caja de herramientas para desarrolladores.

La aplicación de muestra se puede encontrar en GitHub.