Depuración remota de Java

Mehvish Ashiq 15 febrero 2024
  1. requisitos previos
  2. Crear una aplicación Java
  3. Escribir código Java
  4. Depuración remota de Java
  5. Ejecute la aplicación Java
  6. Adjuntar depurador a un proceso
  7. Protocolo de cable de depuración de Java
Depuración remota 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.

  1. Crear una aplicación Java
  2. Escribir código Java
  3. [Depuración remota de Java](##Depuración remota de Java)
  4. Ejecutar la aplicación Java
  5. Adjuntar el depurador a un proceso
  6. [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.

depuración remota java - crear proyecto

Paso 3: cree la clase Java haciendo clic con el botón derecho en src Carpeta -> Nuevo -> Clase Java.

depuración remota de java - crear 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.

depuración remota de java - nombre de la clase de java

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.

Depuración remota de Java: configuración de la pantalla uno del depurador

Paso 2: Haga clic en el signo + en la esquina superior izquierda y seleccione Depuración remota de JVM.

Depuración remota de Java: configuración de la pantalla dos del depurador

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.

Depuración remota de Java: configuración de la pantalla tres del depurador

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á.

Depuración remota de Java: configurar la pantalla de la aplicación host uno

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.

Depuración remota de Java: pantalla dos de la aplicación host de configuración

Ejecute la aplicación Java

Ejecute la aplicación yendo a Ejecutar -> Ejecutar. Asegúrese de que su clase Java esté seleccionada.

Depuración remota de Java: ejecute la pantalla de la aplicación uno

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.

Depuración remota de Java: adjunte la pantalla del depurador uno

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.

Depuración remota de Java: adjunte la pantalla dos del depurador

El depurador se adjunta correctamente.

depuración remota de Java: adjunte la pantalla cuatro del depurador

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.

Depuración remota de Java: adjunte la pantalla del depurador tres

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.

  1. El transporte es la única opción totalmente necesaria. Indica qué mecanismo de transporte se usaría. Estamos usando dt_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.
  2. 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 de dirección. De lo contrario, JDWP expone el predeterminado.
  3. La opción suspender define si una JVM (Java Virtual Machine) debe suspenderse y esperar a que el depurador se conecte o no.
  4. 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 usamos server=y sin especificar la dirección en Windows).
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook