Remote-Debugging mit IntelliJ IDEA

1. Einleitung

Durch Remote-Debugging können Entwickler eindeutige Fehler auf einem Server oder einem anderen Prozess diagnostizieren. Es bietet die Möglichkeit, diese lästigen Laufzeitfehler aufzuspüren und Leistungsengpässe und Ressourcensenken zu identifizieren.

In diesem Tutorial werfen wir einen Blick auf das Remote-Debugging mit JetBrains IntelliJ IDEA. Bereiten wir zuerst unsere Beispielanwendung vor, indem wir die JVM ändern.

2. Konfigurieren Sie die JVM

Wir verwenden eine Spring Scheduler-Beispielanwendung, um eine Verbindung zu einer regelmäßig geplanten Aufgabe herzustellen und Haltepunkte hinzuzufügen.

Darüber hinaus stellt IntelliJ IDEA unsere JVM-Parameter als Teil der Konfiguration bereit :

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

2.1. JVM-Parameter

Neben der JDWP-Konfiguration (Java Debug Wire Protocol) - jdwp = transport = dt_socket - werden die Parameter Server , Suspend und Adresse angezeigt .

Der Serverparameter konfiguriert die JVM als Ziel für unseren Debugger. Der Suspend- Parameter weist die JVM an, vor dem Start auf die Verbindung eines Debugger-Clients zu warten. Schließlich wird die Adresse verwendet Parameter einen Platzhalter - Host und eine deklarierte Port.

Erstellen wir also die Scheduler-Anwendung:

mvn clean package

Und jetzt starten wir die Anwendung, einschließlich des Parameters -agentlib: jdwp :

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \ target/gs-scheduling-tasks-0.1.0.jar

Öffnen Sie ein Terminal und führen Sie den Befehl aus. Nachdem unsere Anwendung gestartet wurde, wechseln wir jetzt zu IntelliJ.

3. Führen Sie die Konfiguration in IntelliJ IDEA aus

Als Nächstes erstellen wir in IntelliJ eine neue Ausführungskonfiguration für das Remote-Debugging:

Nun , da unsere Anwendung ausgeführt wird , lassen Sie uns die Remote - Debugging - Sitzung , indem Sie auf den Start Debug - Taste.

4. Remote-Debugging

Als Nächstes öffnen wir die ScheduleTask- Datei und platzieren einen Haltepunkt in Zeile 36, die hier gezeigt wird:

public void reportCurrentTime() { log.info("The time is now {}", dateFormat.format(new Date())); }

Da die Aufgabe alle fünf Sekunden ausgeführt wird, wird sie kurz nach dem Hinzufügen gestoppt. Infolgedessen können wir jetzt die gesamte Anwendung durchlaufen.

Für die Anwendung Startproblemen wir das ändern Suspend - Flag n und einen Haltepunkt an der Stelle , Hauptverfahren Anwendung.

4.1. Einschränkungen

Manchmal verwirren uns Protokollierung und Ausgabe beim Remote-Debugging. Die Protokolle werden nicht an die IDE-Konsole gesendet, sodass eine externe Protokolldatei verwendet und der IDE zugeordnet werden kann, um eine robustere Debugging-Funktion zu gewährleisten.

Denken Sie auch daran, dass Remote-Debugging zwar ein sehr leistungsfähiges Tool ist, eine Produktionsumgebung jedoch kein geeignetes Ziel für das Debuggen ist .

5. Schlussfolgerung

Wie in diesem Artikel beschrieben, ist das Remote-Debugging mit IntelliJ in wenigen Schritten einfach einzurichten und zu verwenden.

Wir haben uns in unserer Entwickler-Toolbox angesehen, wie wir unsere Anwendungs-JVM für das Debuggen konfigurieren und einige Einschränkungen dieses wichtigen Tools.

Die Beispielanwendung finden Sie auf GitHub.