Nota:
- Questa esercitazione è disponibile in un ambiente di laboratorio gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti Oracle Cloud Infrastructure. Al termine del laboratorio, sostituire questi valori con quelli specifici del tuo ambiente cloud.
Debug degli eseguibili generati da un'immagine nativa GraalVM
Introduzione
Questo laboratorio presenta il supporto per il debug fornito da Visual Studio Code (Codice VS) per le applicazioni Java compilato in anticipo utilizzando GraalVM Enterprise Native Image.
L'utilizzo di GraalVM Native Image in anticipo continua a crescere e, insieme a questa crescita, diventa la necessità di strumenti. L'estensione GraalVM Tools for Java per il codice VS include il supporto per il debug per gli eseguibili generati dall'immagine nativa GraalVM che fornisce:
- breakpoint
- punti di controllo
- esecuzione dettagliata interattiva
- ispezione variabile per eseguibili
In questo laboratorio vengono introdotte (e più) queste funzioni nel contesto di un piccolo esempio.
GraalVM Enterprise è disponibile gratuitamente su Oracle Cloud Infrastructure (OCI)
Contenuto laboratorio
In questo laboratorio:
- Inizializzare l'ambiente Lab
- Connettersi a un host VM remoto in Oracle Cloud per eseguire il laboratorio
- Creare e compilare un'applicazione Java in un eseguibile nativo utilizzando l'immagine nativa GraalVM
- Configurare il debug nativo per un'applicazione in codice VS
- Imposta breakpoint e passi attraverso l'origine Java compilata nel codice macchina nativo
Tempo di laboratorio stimato: 45 minuti
NOTA: ogni volta che viene visualizzata l'icona del laptop, sarà necessario eseguire un'azione quale l'immissione di un comando o la modifica di un file.
# The box under the icon will tell you what to do.
STEP 1: connessione a un'istanza VM
Quando avvii il laboratorio, il provisioning delle risorse di computazione necessarie viene eseguito in background, in questo caso un'istanza VM. Il completamento del provisioning può richiedere alcuni minuti. È possibile sapere quando le risorse sono state attivate e pronte completamente consultando la scheda Risorse nella pagina Web Luna Lab (vedere il passo 2 più avanti).
-
Fare doppio clic sull'icona Luna Lab sul desktop per aprire il browser.
-
Quando l'ingranaggio animato oltre a Risorse diventa un segno di spunta, viene eseguito il provisioning di tutte le risorse di calcolo e di rete necessarie ed è possibile continuare.
-
Scorrere fino a Impostazione e copiare il testo dalla casella di testo Apri VSCode e Connetti. È necessario fare clic su
View Details
. Questo script imposterà l'ambiente necessario per il laboratorio e avvierà il codice VS. È possibile utilizzare il pulsante Copia negli Appunti all'estrema destra visualizzato al passaggio del mouse sulla casella. -
Fare clic sul menu Applicazioni e aprire un emulatore di terminale.
-
Posizionare il cursore nella finestra Terminale e incollare lo script di inizializzazione laboratorio copiato (Shift+Ctrl+V). Una finestra di dialogo avvisa che si stanno incollando più righe che sembrano sospette, ma fare clic su Incolla per continuare.
-
Una finestra Codice VS aprirà e si connetterà automaticamente all'istanza VM remota di cui è stato eseguito il provisioning. Fare clic su Continua per accettare l'impronta digitale del computer.
-
La casella verde nell'angolo in basso a sinistra del codice VS visualizzerà
SSH: <REMOTE VM IP ADDRESS>
per indicare che si è connessi tramite SSH.
STEP 2: creazione dell'applicazione di esempio
Con il codice VS GraalVM Tools for Java è possibile creare, testare ed eseguire il debug delle applicazioni Java in esecuzione su JVM. Tuttavia, la nostra attenzione in questo laboratorio consiste nel debug degli eseguibili nativi generati da GraalVM Native Image, quindi non utilizzeremo tutte le funzionalità offerte dagli strumenti.
Aprire src/main/java/javagdb/App.java
e controllare l'origine. L'applicazione calcola il fattoriale del valore passato come argomento di input.
È possibile eseguire o eseguire il debug dell'applicazione su JVM (Java Virtual Machine) utilizzando i collegamenti sovrapposti nel codice di origine (come mostrato). Tuttavia, è necessario eseguire alcune impostazioni aggiuntive prima di eseguire il debug di un eseguibile nativo.
Si noti che la chiamata a neverCalledMethod()
viene sottolineata con una linea ondulata gialla per indicare che questo codice non è raggiungibile. Questo codice morte viene incluso intenzionalmente nell'applicazione. In seguito, vedremo in che modo GraalVM Native Image affronta il codice morto in un eseguibile nativo quando eseguiamo il debug.
Compilare l'applicazione e generare un eseguibile nativo. A tale scopo, eseguire la build Maven dell'applicazione: compila innanzitutto le origini Java dell'applicazione con javac
, quindi utilizza il plugin Maven GraalVM Native Build Tools per generare un eseguibile nativo utilizzando la utility native-image
.
-
Aprire un terminale utilizzando il menu Terminal>New Terminal nella parte superiore della finestra Codice VS.
-
Nel terminale eseguire Maven per creare il progetto.
mvn -Pnative -DskipTests package
Il tempo necessario per generare un eseguibile nativo è fortemente dipendente dal numero di memorie centrali e dalla quantità di memoria disponibile fornita dal computer. La macchina di laboratorio richiede meno di un minuto.
-
L'eseguibile generato denominato
javagdb
verrà trovato nella cartellatarget
. Si noti che è solo pochi MB!ls -lh target
STEP 3: creazione di una configurazione di debug in launch.json
Dopo aver generato un eseguibile con simboli di debug, è possibile provare il supporto per il debug GraalVM Tools for Java.
-
Fare clic sull'icona Esegui ed esegui debug in
Activity Bar
a sinistra per aprire il pannelloSide Bar
di debug. -
Fare clic sul collegamento creare un file Launch.json e selezionare
Native Image
dall'elenco a discesa Ambiente. -
Il file
launch.json
contiene una configurazione boilerplatenativeimage
da aggiornare. Modificare il valore della proprietànativeImagePath
da individuare nell'eseguibilejavagdb
nella cartellatarget
e aggiungere una proprietàargs
per fornire l'argomento di input.{ // 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" } ] }
STEP 4: debug di un eseguibile
Con il codice compilato e la configurazione di avvio attiva, è possibile eseguire il debug dell'eseguibile. Impostare un breakpoint e un passo attraverso il codice.
-
Tornare a
App.java
e impostare un punto di interruzione alla riga 10 facendo clic sul margine a sinistra del numero di linea. -
Fare clic sulla freccia verde nella parte superiore della barra laterale di debug per eseguire l'applicazione in modalità debug.
Si noti che la barra di stato nella parte inferiore della finestra Codice VS cambia colore in arancione con l'indicazione che viene eseguito il debug.
-
L'applicazione inizia rapidamente, i controlli di debug vengono visualizzati sopra l'origine dell'applicazione e l'esecuzione si arresta nel breakpoint impostato alla riga 10.
-
Utilizzare il pulsante
Step Over
nei controlli del debugger per passare alla riga 17. Si noti che il valore della variabile localen
è100
. -
Proseguire fino alla riga 21 e ora la variabile locale
f
è definita ed è impostata su 100 fattoriale. -
Scorrere verso il basso il codice sorgente in modo da visualizzare le linee da 24 a 35. Si noti che sia l'espressione che chiama
neverCalledMethod()
che l'intera definizione del metodo sono disattivate.L'immagine nativa di GraalVM rileva ed elimina il codice inattivo o non raggiungibile dall'eseguibile generato. Né l'espressione
if(false)
néneverCalledMethod
esistono nel codice del computer dell'eseguibile. Per illustrarlo, il debugger recupera il codice eliminato. -
Fare clic sul pulsante
Continue
del controllo del debugger per consentire l'esecuzione del programma al completamento oppure utilizzare il pulsanteStep Over
per passare attraverso il resto del programma. L'output viene visualizzato inDEBUG CONSOLE
.
Conclusione
In questo laboratorio hai utilizzato gli strumenti GraalVM per Java per eseguire il debug di un eseguibile compilato in anticipo generato da GraalVM Native Image. Si è appreso come creare una configurazione di avvio, come impostare un breakpoint e il debug di un passo di un'applicazione e come riconoscere il codice rilevato come non raggiungibile e quindi non incluso nell'eseguibile.
Per ulteriori informazioni sullo sviluppo con l'immagine nativa GraalVM:
- Guarda un breve video su GraalVM Native Image Hello World.
- Scopri le nozioni di base sulla compilazione precedente del laboratorio online GraalVM Native Image Quick Start.
- Guarda una presentazione dell'architetto di immagini native Christian Wimmer: Java Ahead-of-Time Compilation with Oracle GraalVM
- Leggi la documentazione di riferimento relativa all'immagine nativa GraalVM
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di apprendimento gratuito sul canale Oracle Learning YouTube. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare il sito Oracle Help Center.