Nota:

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:

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:

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

  1. Fare doppio clic sull'icona Luna Lab sul desktop per aprire il browser.

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

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

  4. Fare clic sul menu Applicazioni e aprire un emulatore di terminale.

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

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

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

  1. Aprire un terminale utilizzando il menu Terminal>New Terminal nella parte superiore della finestra Codice VS.

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

  3. L'eseguibile generato denominato javagdb verrà trovato nella cartella target. 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.

  1. Fare clic sull'icona Esegui ed esegui debug in Activity Bar a sinistra per aprire il pannello Side Bar di debug.

  2. Fare clic sul collegamento creare un file Launch.json e selezionare Native Image dall'elenco a discesa Ambiente.

  3. Il file launch.json contiene una configurazione boilerplate nativeimage da aggiornare. Modificare il valore della proprietà nativeImagePath da individuare nell'eseguibile javagdb nella cartella target 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.

  1. Tornare a App.java e impostare un punto di interruzione alla riga 10 facendo clic sul margine a sinistra del numero di linea.

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

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

  4. Utilizzare il pulsante Step Over nei controlli del debugger per passare alla riga 17. Si noti che il valore della variabile locale n è 100.

  5. Proseguire fino alla riga 21 e ora la variabile locale f è definita ed è impostata su 100 fattoriale.

  6. 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)neverCalledMethod esistono nel codice del computer dell'eseguibile. Per illustrarlo, il debugger recupera il codice eliminato.

  7. Fare clic sul pulsante Continue del controllo del debugger per consentire l'esecuzione del programma al completamento oppure utilizzare il pulsante Step Over per passare attraverso il resto del programma. L'output viene visualizzato in DEBUG 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:

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.