Java-Remote-Debugging

Mehvish Ashiq 15 Februar 2024
  1. Voraussetzungen
  2. Erstellen Sie eine Java-Anwendung
  3. Schreiben Sie Java-Code
  4. Java-Remote-Debugging
  5. Führen Sie die Java-Anwendung aus
  6. Debugger an einen Prozess anhängen
  7. Java-Debug-Wire-Protokoll
Java-Remote-Debugging

Wir müssen eine Java-Anwendung mit bestimmten Parametern ausführen, damit ein Remote-Debugger angehängt werden kann. Wir werden untersuchen, wie Run/Debug-Konfigurationen eingerichtet werden, die die Arbeit für uns erledigen.

Voraussetzungen

Um diesem Tutorial zu folgen, müssen wir die folgenden Dinge am Laufen haben.

  • Java 18 und die Umgebungsvariable müssen gesetzt sein.
  • IntelliJ IDEA Community Edition IDE (Sie können es auch hier herunterladen).
  • Die IP-Adresse und Portnummer eines Remote-Computers (Sie können auch diesem Artikel folgen, wenn Sie auf dem lokalen Computer arbeiten)

Das verbleibende Tutorial ist unter Berücksichtigung der Neulinge für diese IDE in sechs Abschnitte unterteilt. Wenn Sie IntelliJ IDEA bereits verwenden, können Sie zum gewünschten Abschnitt springen; alle von ihnen sind unten angegeben.

  1. Java-Anwendung erstellen
  2. [Java-Code schreiben](##Java-Code schreiben)
  3. Java-Remote-Debugging
  4. [Java-Anwendung ausführen](##Java-Anwendung ausführen)
  5. Debugger an einen Prozess anhängen
  6. Java Debug Wire Protocol

Erstellen Sie eine Java-Anwendung

Schritt 1: Öffnen Sie die IntelliJ IDEA IDE.

Schritt 2: Klicken Sie auf Datei -> Neu -> Projekt. Der folgende Bildschirm wird angezeigt, klicken Sie auf Neues Projekt, geben Sie den Namen des Projekts ein und legen Sie den Speicherort fest.

Stellen Sie sicher, dass die Sprache Java und das Build-System IntelliJ ausgewählt sind. IntelliJ IDEA erkennt automatisch, ob Sie JDK (Java Development Kit) am Standardspeicherort installiert haben.

Andernfalls können Sie nach JDK suchen und es von hier herunterladen, ohne zum Browser zu navigieren. Klicken Sie abschließend auf die Schaltfläche Erstellen.

Java-Remote-Debugging – Projekt erstellen

Schritt 3: Erstellen Sie eine Java-Klasse, indem Sie mit der rechten Maustaste auf src Ordner -> Neu -> Java-Klasse klicken.

Java-Remote-Debugging - Java-Klasse erstellen

Schreiben Sie den Namen der Java-Klasse. Wenn Sie nur den Namen schreiben, wird dieser im Standardpaket erstellt.

Um eine Java-Klasse in Ihrem gewünschten Paket zu erstellen, schreiben Sie den Namen wie folgt. Es erstellt ein Paket und eine Datei mit den Namen com.company.remotedebugging bzw. RemoteDebugging.java.

Java-Remote-Debugging – Java-Klasse benennen

Schreiben Sie Java-Code

Beispielcode:

// You may have a different package name. Write yours here
package com.company.remotedebugging;

// RemoteDebugging class
public class RemoteDebugging {
  // main method
  public static void main(String[] args) {
    String fullName = "Mehvish Ashiq";
    System.out.println("Star Printing");

    // iterate over the string variable
    for (int i = 0; i < fullName.length(); i++) {
      try {
        // sleep for 500 milliseconds
        Thread.sleep(500);
      } // end try
      catch (InterruptedException e) {
        e.printStackTrace();
      } // end catch
      // print character
      System.out.println(fullName.charAt(i));
    } // end for-loop

    System.out.println("Task Completed!");
  } // end main function
} // end RemoteDebugging Class

Java-Remote-Debugging

Wir müssen nur zwei Run/Debug-Konfigurationen vornehmen, erstens zum Ausführen der Anwendung und zweitens zum Anhängen an sie. Mal sehen, wie wir das machen können.

Debugger einrichten

Schritt 1: Gehen Sie zu Ausführen -> Konfigurationen bearbeiten.

java remote debugging - setup debugger screen one

Schritt 2: Klicken Sie oben links auf das +-Zeichen und wählen Sie Remote JVM Debug.

Java-Remote-Debugging - Setup-Debugger-Bildschirm zwei

Schritt 3: Wir konfigurieren ein paar Dinge. Schreiben Sie zuerst den Namen, um zu sagen, wie diese run-Konfiguration aufgerufen wird.

Sie können auch den Standardwert verwenden, aber es ist gut, einen anderen Namen zur Unterscheidung zu haben. Stellen Sie sicher, dass bei den Optionen Debugger-Modus und Transport die Optionen Attach to remote JVM und Socket ausgewählt sind.

Schreiben Sie als Nächstes die IP-Adresse eines Computers, auf dem diese App ausgeführt wird. Wir werden localhost schreiben, wenn wir auf derselben Maschine ausführen.

Denken Sie daran, dass wir die IP-Adresse schreiben, wenn die Anwendung auf einem anderen Computer ausgeführt wird. Zum Beispiel sieht die IP wie 192.168.15.119 aus.

Geben Sie dann die Portnummer ein, die Sie für eine Remoteverbindung offen halten möchten. Kopieren Sie nun die Befehlszeilenargumente in einen Editor (dies wird später in diesem Tutorial verwendet).

Diese VM-Optionen werden von einer zu startenden Hostanwendung benötigt. Klicken Sie auf Übernehmen und dann auf OK.

Sehen Sie sich den folgenden Screenshot als Referenz an.

Java-Remote-Debugging - Setup-Debugger-Bildschirm drei

Hostanwendung einrichten

Wir verwenden die Run/Debug-Konfigurationen, um unsere Host-Anwendung einzurichten, aber es gibt keine Einschränkungen dafür, wie die Host-App ausgeführt werden soll.

Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im Hauptteil Ihrer Java-Klasse (in diesem Beispiel ist die Java-Klasse RemoteDebugging.java) und wählen Sie Modify Run Configuration. Der folgende Bildschirm wird angezeigt.

Java-Remote-Debugging - Host-App-Bildschirm 1 einrichten

Klicken Sie auf Optionen ändern und wählen Sie VM-Optionen hinzufügen, was den folgenden Bildschirm öffnet. Schreiben Sie die Befehlszeilenargumente, die Sie beim Einrichten des Debuggers in den Editor kopiert haben, und fügen Sie sie wie im folgenden Screenshot angegeben ein.

Klicken Sie abschließend auf Übernehmen und anschliessend auf OK.

Java-Remote-Debugging - Host-App-Bildschirm 2 einrichten

Führen Sie die Java-Anwendung aus

Führen Sie die Anwendung aus, indem Sie zu Ausführen -> Ausführen gehen. Stellen Sie sicher, dass Ihre Java-Klasse ausgewählt ist.

Java-Remote-Debugging - App-Bildschirm 1 ausführen

Die erste Zeile in der Programmausgabe muss wie folgt aussehen.

Überwachen des Transports dt_socket unter der Adresse: 5005

Es zeigt, dass wir einen Debug-Agent erfolgreich aktiviert haben. Jetzt ist unser Java-Programm bereit, die eingehenden Debugger-Verbindungen zu akzeptieren.

Debugger an einen Prozess anhängen

Klicken Sie in der Zeile, in der Sie den Haltepunkt hinzufügen möchten, auf den Bundsteg. Wir fügen den Haltepunkt in der folgenden Zeile hinzu, die im folgenden Screenshot hervorgehoben ist.

Java-Remote-Debugging - Debugger-Bildschirm eins anhängen

Führen Sie die Anwendung aus, indem Sie wie im vorherigen Abschnitt zu Ausführen -> Ausführen gehen. Klicken Sie in der Programmausgabe auf Debugger anhängen.

Sie finden es wie im folgenden Screenshot gezeigt.

Java Remote Debugging - Attach Debugger Screen Two

Der Debugger wurde erfolgreich angefügt.

Java-Remote-Debugging - Debugger-Bildschirm 4 anhängen

Infolgedessen wird das Programm ausgesetzt, sobald es den Haltepunkt erreicht. Sie können alle Debugging-bezogenen Aktionen ausführen, z. B. Ausdrucksauswertung.

Java-Remote-Debugging - Debugger-Bildschirm 3 anhängen

Wenn Sie fertig sind, vergessen Sie nicht, die Debugger-Sitzung zu schließen, indem Sie die Sitzungsregisterkarte im Werkzeugfenster Debuggen schließen oder auf das rote Quadrat links klicken, um sie zu stoppen.

Java-Debug-Wire-Protokoll

Das Java Debug Wire Protocol (auch JDWP genannt) ist ein Protokoll, das für die Kommunikation zwischen einem Debugger und einem debuggee verwendet wird. Hier ist der debuggee eine Anwendung, die debuggt wird, während ein Debugger ein Prozess ist, der eine Verbindung zu einer Anwendung herstellt, die debuggt wird.

Denken Sie daran, dass beide Anwendungen auf verschiedenen oder demselben Computer ausgeführt werden können. Wir haben JDWP in den JVM-Befehlszeilenargumenten verwendet, um die debuggee-Anwendung zu starten.

Es erfordert verschiedene Parameter (Optionen), die im Folgenden kurz beschrieben werden.

  1. Der transport ist die einzige vollständig benötigte Option. Es gibt an, welcher Transportmechanismus verwendet werden würde. Wir verwenden dt_socket, das mit jeder Plattform kompatibel ist und die Prozesse auf verschiedenen Maschinen laufen lässt. Im Gegensatz dazu wird dt_shmem verwendet, wenn beide Prozesse auf derselben Maschine ausgeführt werden und wir nur unter Windows arbeiten möchten.
  2. Die Option server ist nicht obligatorisch. Wenn dieses Flag aktiviert ist, definiert es, wie es an einen Debugger angehängt wird. Es offenbart einen Prozess, durch den die Adresse in einer Adresse-Option definiert wird. Andernfalls zeigt JDWP die Standardeinstellung an.
  3. Die Option suspend legt fest, ob eine JVM (Java Virtual Machine) suspendiert und auf das Anhängen des Debuggers warten soll oder nicht.
  4. Die Option Adresse hat die Adresse und eine Portnummer, die von einem Debuggee bekannt gegeben werden. Dies kann auch eine Adresse bezeichnen, die in eine Zeichenfolge übersetzt wurde (z. B. javadebug, wenn wir server=y verwenden, ohne die Adresse unter Windows anzugeben).
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook