Hinweis:

Durch GraalVM Native Image generierte ausführbare Dateien debuggen

Einführung

In dieser Übung wird die Debuggingunterstützung von Visual Studio Code (VS Code) für Java-Anwendungen vorgestellt, die im Voraus mit GraalVM Enterprise Native Image kompiliert wurden.

Die Verwendung von GraalVM Native Image im Voraus wird weiterhin steigen und zusammen mit diesem Wachstum müssen Tools bereitgestellt werden. Die Erweiterung GraalVM Tools for Java für VS Code umfasst Debuggingunterstützung für ausführbare Programme, die von GraalVM Native Image generiert werden, mit denen:

In dieser Übung werden diese Features (und mehr) im Kontext eines kleinen Beispiels vorgestellt.

GraalVM Enterprise ist ohne Kosten auf Oracle Cloud Infrastructure (OCI) verfügbar

Laborinhalt

In dieser Übung führen Sie folgende Schritte aus:

Geschätzte Labordauer: 45 Minuten

HINWEIS: Wenn das Laptopsymbol angezeigt wird, müssen Sie eine Aktion ausführen, wie z.B. die Eingabe eines Befehls oder die Bearbeitung einer Datei.

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

Schritt 1: Verbindung zu einer VM-Instanz herstellen

Beim Starten der Übung werden die erforderlichen Compute-Ressourcen im Hintergrund bereitgestellt (in diesem Fall eine VM-Instanz). Das Provisioning kann einige Minuten in Anspruch nehmen. Informationen dazu, wann die Ressourcen vollständig bereitgestellt und bereit sind, finden Sie auf der Webseite Luna Lab auf der Registerkarte Ressourcen (siehe Schritt 2 unten).

  1. Doppelklicken Sie auf dem Desktop auf das Symbol Luna Lab, um den Browser zu öffnen.

  2. Wenn das animierte Fanggerät außer Ressourcen zu einem Häkchen wechselt, werden alle erforderlichen Compute- und Netzwerkressourcen bereitgestellt, und Sie können fortfahren.

  3. Scrollen Sie nach unten zu Setup, und kopieren Sie den Text aus dem Textfeld Open VSCode and Connect. Sie müssen auf View Details klicken. Dieses Skript richtet die Umgebung ein, die für die Übung erforderlich ist, und startet den VS-Code. Mit der Schaltfläche In Zwischenablage kopieren ganz rechts, die angezeigt wird, wenn Sie den Mauszeiger über das Feld bewegen.

  4. Klicken Sie auf das Menü Anwendungen, und öffnen Sie einen Terminalemulator.

  5. Platzieren Sie den Cursor im Terminalfenster, und fügen Sie das kopierte Labinitialisierungsskript ein (Shift+Ctrl+V). In einem Dialogfeld werden Sie gewarnt, dass Sie mehrere verdächtige Zeilen einfügen. Klicken Sie jedoch auf Einfügen, um fortzufahren.

  6. Ein VS-Codefenster wird geöffnet und stellt automatisch eine Verbindung zur Remote-VM-Instanz her, die für Sie bereitgestellt wurde. Klicken Sie auf Weiter, um den Fingerprint des Rechners zu akzeptieren.

  7. Im grünen Feld in der unteren linken Ecke des VS-Codes wird SSH: <REMOTE VM IP ADDRESS> angezeigt, um anzugeben, dass Sie über SSH verbunden sind.

Schritt 2: Beispielanwendung erstellen

Mit dem VS-Code GraalVM Tools for Java können Sie Java-Anwendungen erstellen, testen und debuggen, die auf der JVM ausgeführt werden. Im Rahmen dieser Übung debuggen wir jedoch native, ausführbare Dateien, die von GraalVM Native Image generiert werden. Deshalb verwenden wir nicht alle Funktionen der Tools.

Öffnen Sie src/main/java/javagdb/App.java, und prüfen Sie die Quelle. Die Anwendung berechnet den Faktor des als Eingabeargument übergebenen Wertes.

Sie können die Anwendung auf der Java Virtual Machine (JVM) mit den Links ausführen oder debuggen, die im Quellcode überlagert sind (siehe Abbildung). Vor dem Debuggen einer nativen ausführbaren Datei ist jedoch ein zusätzliches Setup erforderlich.

Beachten Sie, dass der Aufruf von neverCalledMethod() mit einer gelben Wellenlinie unterstrichen ist, um anzugeben, dass dieser Code nicht erreichbar ist. Dieser Dead Code ist absichtlich in der Anwendung enthalten. Später wird gezeigt, wie GraalVM Native Image beim Debugging mit totem Code in einer nativen ausführbaren Datei umgeht.

Kompilieren Sie die Anwendung, und generieren Sie eine native ausführbare Datei. Führen Sie dazu den Maven-Build der Anwendung aus: Zuerst werden die Java-Quellen der Anwendung mit javac kompiliert, und dann wird mit dem Maven-Plug-in GraalVM Native Build Tools eine native ausführbare Datei mit dem Utility native-image generiert.

  1. Öffnen Sie ein Terminal mit dem Menü Terminal>New Terminal am oberen Rand des VS-Codefensters.

  2. Führen Sie im Terminal Maven aus, um das Projekt zu erstellen.

    mvn -Pnative -DskipTests package
    

    Die zum Generieren einer nativen ausführbaren Datei erforderliche Zeit hängt in hohem Maße von der Anzahl der Cores und dem verfügbaren Arbeitsspeicher ab, der von Ihrem Rechner bereitgestellt wird. Es sollte einige Minuten dauern.

  3. Sie finden die generierte ausführbare Datei mit dem Namen javagdb im Ordner target. Beachten Sie, dass es nur ein paar MB ist!

    ls -lh target
    

Schritt 3: Debug-Konfiguration in launch.json erstellen

Nachdem Sie eine ausführbare Datei mit Debug-Symbolen generiert haben, können Sie jetzt die Unterstützung für GraalVM Tools for Java Debugging testen.

  1. Klicken Sie auf das Symbol Ausführen und debuggen im Activity Bar auf der linken Seite, um den Debug Side Bar-Bereich zu öffnen.

  2. Klicken Sie auf den Link Launch.json-Datei erstellen, und wählen Sie Native Image aus der Dropdown-Liste "Umgebung" aus.

  3. Die Datei launch.json enthält eine Boilerplate-Konfiguration nativeimage, die Sie aktualisieren können. Bearbeiten Sie den Wert der Eigenschaft nativeImagePath, um die ausführbare Datei javagdb im Ordner target zu suchen, und fügen Sie eine Eigenschaft args hinzu, um das Eingabeargument anzugeben.

    {
     // 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"
    
         }
       ]
    }
    

Schritt 4: Ausführbare Programme debuggen

Wenn der kompilierte Code und die Startkonfiguration vorhanden sind, können Sie die ausführbare Datei debuggen. Legen Sie einen Breakpoint fest, und durchlaufen Sie den Code.

  1. Kehren Sie zu App.java zurück, und legen Sie einen Breakpoint in Zeile 10 fest, indem Sie auf den Rand links neben der Zeilennummer klicken.

  2. Klicken Sie auf den grünen Pfeil oben in der Debug-Seitenleiste, um die Anwendung im Debug-Modus auszuführen.

    Beachten Sie, dass die Statusleiste unten im Fenster "VS-Code" die Farbe in Orange ändert, um anzuzeigen, dass das Debugging durchgeführt wird.

  3. Die Anwendung wird schnell gestartet, Debug-Steuerelemente werden über der Anwendungsquelle angezeigt, und die Ausführung wird am Breakpoint gestoppt, den Sie in Zeile 10 festlegen.

  4. Verwenden Sie die Schaltfläche Step Over in den Debugger-Steuerelementen, um zu Zeile 17 zu gehen. Beachten Sie, dass der Wert der lokalen Variablen n 100 lautet.

  5. Fahren Sie mit dem Schritt nach unten zu Zeile 21 fort, und jetzt ist die lokale Variable f definiert und auf 100 Faktorial gesetzt.

  6. Blättern Sie im Quellcode nach unten, damit die Zeilen 24 bis 35 angezeigt werden. Beachten Sie, dass sowohl der Ausdruck, der neverCalledMethod() aufruft, als auch die gesamte Methodendefinition ausgegraut sind.

    Das native GraalVM Image erkennt und eliminiert toten oder nicht zugänglichen Code von der generierten ausführbaren Datei. Weder der Ausdruck if(false) noch neverCalledMethod sind im Rechnercode der ausführbaren Datei vorhanden. Um dies zu veranschaulichen, ruft der Debugger den Eliminierungscode ab.

  7. Klicken Sie auf die Debugger-Kontrollschaltfläche Continue, damit das Programm abgeschlossen werden kann, oder verwenden Sie die Schaltfläche Step Over, um den Rest des Programms zu durchlaufen. Die Ausgabe wird in DEBUG CONSOLE angezeigt.

Schlussfolgerung

In dieser Übung haben Sie mit GraalVM Tools for Java eine kompilierte, vorab von GraalVM Native Image generierte ausführbare Datei debuggen. Sie haben gelernt, wie Sie eine Startkonfiguration erstellen, wie Sie einen Breakpoint festlegen und eine Anwendung debuggen, und wie Sie Code erkennen, der als nicht erreichbar erkannt wurde und daher nicht in der ausführbaren Datei enthalten ist.

Weitere Informationen zur Entwicklung mit GraalVM Native Image:

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere Inhalte für kostenloses Lernen im Oracle Learning YouTube-Kanal zu. Außerdem besuchen Sie education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.