Nota:

Depuración de ejecutables generados de GraalVM Native Image

Introducción

En este laboratorio se presenta el soporte de depuración proporcionado por Visual Studio Code (VS Code) para aplicaciones Java compiladas de forma anticipada mediante GraalVM Enterprise Native Image.

El uso de la compilación anticipada de GraalVM Native Image sigue creciendo, junto con ese crecimiento llega a la necesidad de herramientas. La extensión GraalVM Tools for Java para VS Code incluye soporte de depuración para ejecutables generados por GraalVM Native Image que proporciona:

En este laboratorio se presentan estas funciones (y mucho más) en el contexto de un pequeño ejemplo.

GraalVM Enterprise está disponible sin costo alguno en Oracle Cloud Infrastructure (OCI)

Contenido del laboratorio

En este laboratorio:

Tiempo de laboratorio estimado: 45 minutos

NOTA: Siempre que vea el icono de portátil, deberá realizar una acción, como introducir un comando o editar un archivo.

# The box under the icon will tell you what to do.

PASO 1: conexión a una instancia de VM

Al iniciar la práctica, los recursos informáticos necesarios se aprovisionan en segundo plano (en este caso, una instancia de VM). El aprovisionamiento puede tardar unos minutos en realizarse. Puede saber cuándo se aprovisionan y están listos los recursos completamente consultando el separador Recursos de la página web de Luna Lab (consulte el paso 2, a continuación).

  1. Haga doble clic en el icono Luna Lab en el escritorio para abrir el explorador.

  2. Cuando el engranaje animado además de Recursos se convierte en una marca de verificación, se aprovisionan todos los recursos informáticos y de red necesarios y puede continuar.

  3. Desplácese hacia abajo hasta Setup y copie el texto del cuadro de texto Open VSCode and Connect. Es necesario hacer clic en View Details. Este script configurará el entorno necesario para la práctica e iniciará el código de VS. Puede utilizar el botón Copiar en portapapeles en el extremo derecho que aparece al pasar el mouse sobre el cuadro.

  4. Haga clic en el menú Aplicaciones y abra un emulador de terminal.

  5. Coloque el cursor en la ventana Terminal y pegue el script de inicialización de prácticas que ha copiado (Shift+Ctrl+V). Un cuadro de diálogo le advertirá que está pegando varias líneas que parecen sospechosas, pero haga clic en Pegar para continuar.

  6. Se abrirá una ventana de código VS y se conectará automáticamente a la instancia de VM remota que se le haya aprovisionado. Haga clic en Continuar para aceptar la huella del equipo.

  7. El cuadro verde en la esquina inferior izquierda del código VS mostrará SSH: <REMOTE VM IP ADDRESS> para indicar que está conectado mediante SSH.

PASO 2: creación de la aplicación de ejemplo

Con las Herramientas GraalVM para Java de código de VS, puede crear, probar y depurar aplicaciones Java que se ejecutan en JVM. Sin embargo, nuestro enfoque en este laboratorio consiste en depurar ejecutables nativos generados por GraalVM Native Image, por lo que no utilizaremos todas las funcionalidades que proporcionan las herramientas.

Abra src/main/java/javagdb/App.java y consulte el origen. La aplicación calcula la factorial del valor transferido como su argumento de entrada.

Puede ejecutar o depurar la aplicación en Java Virtual Machine (JVM) mediante los enlaces superpuestos en el código fuente (como se muestra). Sin embargo, se necesita alguna configuración adicional antes de depurar un ejecutable nativo.

Tenga en cuenta que la llamada a neverCalledMethod() está subrayada con una línea ondulada amarilla para indicar que este código no es accesible. Este código inactivo se incluye intencionadamente en la aplicación. Más adelante, veremos cómo GraalVM Native Image se ocupa de los códigos muertos en un ejecutable nativo en el momento de la depuración.

Compile la aplicación y genere un ejecutable nativo. Para ello, ejecute la creación de Maven de la aplicación: primero compila los orígenes de Java de la aplicación con javac y, a continuación, utiliza el plugin Maven de GraalVM Native Build Tools para generar un ejecutable nativo con la utilidad native-image.

  1. Abra un terminal mediante el menú Terminal>New Terminal (Terminal>Nuevo terminal) en la parte superior de la ventana de código de VS.

  2. En el terminal, ejecute Maven para crear el proyecto.

    mvn -Pnative -DskipTests package
    

    El tiempo necesario para generar un ejecutable nativo depende en gran medida del número de núcleos y de la cantidad de memoria disponible proporcionada por la máquina. Debe tardar menos de un minuto en la máquina de laboratorio.

  3. Encontrará el ejecutable generado denominado javagdb en la carpeta target. Tenga en cuenta que solo son algunos MB.

    ls -lh target
    

PASO 3: creación de una configuración de depuración en launch.json

Ahora que tiene un ejecutable generado con símbolos de depuración, puede probar el soporte de depuración de GraalVM Tools for Java.

  1. Haga clic en el icono Ejecutar y depurar en Activity Bar de la izquierda para abrir el panel Side Bar de depuración.

  2. Haga clic en el enlace crear un archivo Launch.json y seleccione Native Image en la lista desplegable de entorno.

  3. El archivo launch.json contiene una configuración de texto fijo nativeimage que puede actualizar. Edite el valor de la propiedad nativeImagePath para localizar el ejecutable javagdb en la carpeta target y agregue una propiedad args para proporcionar el argumento de entrada.

    {
     // Use IntelliSense to learn about possible attributes.
     // Hover to view descriptions of existing attributes.
     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
     "version": "0.2.0",
     "configurations": [
         {
             "type": "nativeimage",
             "request": "launch",
             "name": "Launch Native Image",
             "nativeImagePath": "${workspaceFolder}/target/javagdb",
             "args": "100"
    
         }
       ]
    }
    

PASO 4: depuración de un ejecutable

Con el código compilado y la configuración de inicio en su lugar, está listo para depurar el ejecutable. Defina un punto de ruptura y pase por el código.

  1. Vuelva a App.java y defina un punto de ruptura en la línea 10 haciendo clic en el margen a la izquierda del número de línea.

  2. Haga clic en la flecha verde situada en la parte superior de la barra lateral de depuración para ejecutar la aplicación en modo de depuración.

    Tenga en cuenta que la barra de estado situada en la parte inferior de la ventana Código VS cambia de color a naranja como una indicación de que se está realizando la depuración.

  3. La aplicación se inicia rápidamente, los controles de depuración aparecen por encima del origen de la aplicación y la ejecución se detiene en el punto de ruptura definido en la línea 10.

  4. Utilice el botón Step Over en los controles del depurador para bajar a la línea 17. Observe que el valor de la variable local n es 100.

  5. Continúe avanzando a la línea 21 y ahora la variable local f está definida y está definida en 100 factorial.

  6. Desplácese hacia abajo en el código fuente para ver las líneas 24 a 35. Observe que tanto la expresión que llama a neverCalledMethod() como toda la definición del método están atenuadas.

    GraalVM Native Image detecta y elimina código inactivo o inaccesible del ejecutable que genera. Ni la expresión if(false) ni neverCalledMethod existen en el código de máquina del ejecutable. Para ilustrar esto, el depurador muestra el código eliminado.

  7. Haga clic en el botón Continue del control del depurador para que el programa se ejecute o utilice el botón Step Over para pasar por el resto del programa. La salida se muestra en DEBUG CONSOLE.

Conclusión

En este laboratorio, utilizó las herramientas de GraalVM para Java para depurar un ejecutable compilado previo generado por GraalVM Native Image. Ha aprendido a crear una configuración de inicio, cómo definir un punto de ruptura y una depuración de paso de una aplicación y cómo reconocer el código que se ha detectado como inaccesible y, por lo tanto, no se incluye en el ejecutable.

Para obtener más información sobre el desarrollo con GraalVM Native Image:

Más recursos de aprendizaje

Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.

Para obtener documentación sobre los productos, visite Oracle Help Center.