Depuración remota de Java
- requisitos previos
- Crear una aplicación Java
- Escribir código Java
- Depuración remota de Java
- Ejecute la aplicación Java
- Adjuntar depurador a un proceso
- Protocolo de cable de depuración de Java
Debemos ejecutar una aplicación Java con parámetros específicos para permitir que se conecte un depurador remoto. Exploraremos cómo establecer configuraciones de ejecución/depuración que realizarán el trabajo por nosotros.
requisitos previos
Para seguir este tutorial, debemos tener las siguientes cosas en funcionamiento.
- Se debe configurar Java 18 y la variable de entorno.
- IntelliJ IDEA Community Edition IDE (también puede descargarlo desde aquí).
- La dirección IP y el número de puerto de una máquina remota (también puede seguir este artículo si trabaja en la máquina local)
El tutorial restante se divide en seis secciones teniendo en cuenta a los novatos de este IDE. Si ya está utilizando IntelliJ IDEA, puede saltar a la sección deseada; todos ellos se dan a continuación.
- Crear una aplicación Java
- Escribir código Java
- [Depuración remota de Java](##Depuración remota de Java)
- Ejecutar la aplicación Java
- Adjuntar el depurador a un proceso
- [Protocolo de conexión de depuración de Java](##Protocolo de conexión de depuración de Java)
Crear una aplicación Java
Paso 1: Abra IntelliJ IDEA IDE.
Paso 2: Haga clic en Archivo -> Nuevo -> Proyecto. Aparecerá la siguiente pantalla, haga clic en Nuevo proyecto
, escriba el nombre del proyecto y establezca la ubicación donde se guardará.
Asegúrese de que el idioma Java
y el sistema de compilación IntelliJ
estén seleccionados. IntelliJ IDEA detecta automáticamente si ha instalado JDK (Java Development Kit) en su ubicación predeterminada.
De lo contrario, puede navegar para agregar JDK y descargarlo desde aquí sin navegar hasta el navegador. Finalmente, haga clic en el botón Crear
.
Paso 3: cree la clase Java haciendo clic con el botón derecho en src
Carpeta -> Nuevo -> Clase Java.
Escriba el nombre de la clase Java. Si escribes solo el nombre, se crearía en el paquete por defecto
.
Para crear una clase Java en su paquete deseado, escriba el nombre de la siguiente manera. Creará un paquete y un archivo llamados com.company.remotedebugging
y RemoteDebugging.java
, respectivamente.
Escribir código Java
Código de ejemplo:
// You may have a different package name. Write yours here
package com.company.remotedebugging;
// RemoteDebugging class
public class RemoteDebugging {
// main method
public static void main(String[] args) {
String fullName = "Mehvish Ashiq";
System.out.println("Star Printing");
// iterate over the string variable
for (int i = 0; i < fullName.length(); i++) {
try {
// sleep for 500 milliseconds
Thread.sleep(500);
} // end try
catch (InterruptedException e) {
e.printStackTrace();
} // end catch
// print character
System.out.println(fullName.charAt(i));
} // end for-loop
System.out.println("Task Completed!");
} // end main function
} // end RemoteDebugging Class
Depuración remota de Java
Solo se requiere que hagamos dos configuraciones de ejecución/depuración, primero para ejecutar la aplicación y segundo para adjuntarla. Veamos cómo podemos hacer eso.
Configurar depurador
Paso 1: Vaya a Ejecutar -> Editar configuraciones.
Paso 2: Haga clic en el signo +
en la esquina superior izquierda y seleccione Depuración remota de JVM
.
Paso 3: Configuramos algunas cosas. Primero, escriba el nombre para indicar cómo se llamará a esta configuración de ejecutar
.
También puede usar el valor predeterminado, pero es bueno tener un nombre diferente para diferenciar. Asegúrese de que “Adjuntar a JVM remota” y Socket
estén seleccionados para las opciones “Modo depurador” y “Transporte”.
A continuación, escriba la dirección IP de una máquina donde se ejecutará esta aplicación. Escribiremos localhost
mientras ejecutamos en la misma máquina.
Recuerde que escribiremos la dirección IP si la aplicación se ejecuta en una máquina diferente. Por ejemplo, la IP se verá como 192.168.15.119
.
Luego, escriba el número de puerto que desea mantener abierto para una conexión remota. Ahora, copie los argumentos de la línea de comando en un bloc de notas (se usará más adelante en este tutorial).
Estas opciones de VM son requeridas por una aplicación host para iniciarse. Haga clic en Aplicar
y luego en Aceptar
.
Consulte la siguiente captura de pantalla como referencia.
Configurar aplicación de host
Estamos utilizando las configuraciones de ejecución/depuración para configurar nuestra aplicación host, pero no hay restricciones sobre cómo debe ejecutarse la aplicación host.
Haga clic derecho en cualquier parte del cuerpo de su clase Java (en este ejemplo, la clase Java es RemoteDebugging.java
) y seleccione Modificar configuración de ejecución
. La siguiente pantalla aparecerá.
Haga clic en Modificar opciones
y seleccione Agregar opciones de VM
, lo que abrirá la siguiente pantalla. Escriba los argumentos de la línea de comandos que copió en el bloc de notas mientras configuraba el depurador y péguelos como se muestra en la siguiente captura de pantalla.
Finalmente, haga clic en el botón Aplicar
y luego en el botón Aceptar
.
Ejecute la aplicación Java
Ejecute la aplicación yendo a Ejecutar -> Ejecutar. Asegúrese de que su clase Java esté seleccionada.
La primera línea en la salida del programa debe ser la siguiente.
Escuchando el transporte dt_socket en la dirección: 5005
Muestra que hemos habilitado con éxito un agente de depuración. Ahora, nuestro programa Java está listo para aceptar las conexiones entrantes del depurador.
Adjuntar depurador a un proceso
Haga clic en el medianil en una línea donde desee agregar el punto de interrupción. Estamos agregando el punto de interrupción en la siguiente línea, resaltado en la captura de pantalla a continuación.
Ejecute la aplicación yendo a Ejecutar -> Ejecutar como lo hicimos en la sección anterior. En la salida del programa, haga clic en Adjuntar depurador
.
Puede encontrarlo como se muestra en la siguiente captura de pantalla.
El depurador se adjunta correctamente.
Como resultado, el programa se suspenderá tan pronto como alcance el punto de interrupción. Puede realizar cualquier acción relacionada con la depuración, por ejemplo, la evaluación de expresiones.
Una vez hecho esto, no olvide cerrar la sesión del depurador cerrando la pestaña de la sesión en la ventana de la herramienta Depurar
o haciendo clic en el cuadrado
rojo a la izquierda para detenerlo.
Protocolo de cable de depuración de Java
El Java Debug Wire Protocol (también llamado JDWP
) es un protocolo utilizado para la comunicación entre un depurador y un depurador
. Aquí, el depurado
es una aplicación que se está depurando, mientras que un depurador es un proceso que se conecta a una aplicación que se está depurando.
Recuerde, ambas aplicaciones pueden ejecutarse en diferentes o en la misma máquina. Usamos JDWP
en los argumentos de la línea de comandos de JVM para iniciar la aplicación depurada
.
Requiere varios parámetros (opciones) que se describen brevemente a continuación.
- El
transporte
es la única opción totalmente necesaria. Indica qué mecanismo de transporte se usaría. Estamos usandodt_socket
, que es compatible con todas las plataformas y permite que los procesos se ejecuten en varias máquinas. En cambio,dt_shmem
se usa si ambos procesos se ejecutan en la misma máquina y solo queremos que funcionen en Windows. - La opción
servidor
no es obligatoria. Cuando esta marca está activada, define cómo se adjunta a un depurador. Da a conocer un proceso mediante el cual se define la dirección en una opción dedirección
. De lo contrario,JDWP
expone el predeterminado. - La opción
suspender
define si una JVM (Java Virtual Machine) debe suspenderse y esperar a que el depurador se conecte o no. - La opción
dirección
tiene la dirección y un número de puerto divulgados por un depurado. Esto también puede denotar una dirección traducida a una cadena de caracteres (por ejemplo,javadebug
si usamosserver=y
sin especificar ladirección
en Windows).