Nota:
- Este tutorial está disponible en un entorno de prácticas gratuitas proporcionado por Oracle.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por valores específicos de su entorno en la nube.
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:
- puntos de ruptura
- puntos de control
- ejecución interactiva paso a paso
- inspección variable para ejecutables
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:
- Inicializar el entorno de prácticas
- Conéctese a un host de VM remoto en Oracle Cloud donde realizará la práctica
- Cree y compile una aplicación Java en un ejecutable nativo mediante GraalVM Native Image
- Configurar depuración nativa para una aplicación en código VS
- Defina puntos de ruptura y desplácese por el origen Java compilado en código de máquina nativo
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).
-
Haga doble clic en el icono Luna Lab en el escritorio para abrir el explorador.
-
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.
-
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. -
Haga clic en el menú Aplicaciones y abra un emulador de terminal.
-
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.
-
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.
-
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
.
-
Abra un terminal mediante el menú Terminal>New Terminal (Terminal>Nuevo terminal) en la parte superior de la ventana de código de VS.
-
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.
-
Encontrará el ejecutable generado denominado
javagdb
en la carpetatarget
. 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.
-
Haga clic en el icono Ejecutar y depurar en
Activity Bar
de la izquierda para abrir el panelSide Bar
de depuración. -
Haga clic en el enlace crear un archivo Launch.json y seleccione
Native Image
en la lista desplegable de entorno. -
El archivo
launch.json
contiene una configuración de texto fijonativeimage
que puede actualizar. Edite el valor de la propiedadnativeImagePath
para localizar el ejecutablejavagdb
en la carpetatarget
y agregue una propiedadargs
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.
-
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. -
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.
-
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.
-
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 localn
es100
. -
Continúe avanzando a la línea 21 y ahora la variable local
f
está definida y está definida en 100 factorial. -
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)
nineverCalledMethod
existen en el código de máquina del ejecutable. Para ilustrar esto, el depurador muestra el código eliminado. -
Haga clic en el botón
Continue
del control del depurador para que el programa se ejecute o utilice el botónStep Over
para pasar por el resto del programa. La salida se muestra enDEBUG 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:
- Vea un breve vídeo de GraalVM Native Image Hello World.
- Aprenda los conceptos básicos de la compilación anticipada en el laboratorio en línea Inicio rápido de GraalVM Native Image.
- Vea una presentación del arquitecto de Native Image Christian Wimmer: Compilación en modo AOT de Java con Oracle GraalVM
- Lea la documentación de referencia de 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.