Hängen Sie den IntelliJ IDEA-Debugger an einen laufenden Java-Prozess an


237

Ist es möglich, den IntelliJ IDEA-Debugger an einen laufenden Java-Prozess anzuhängen? Wenn ja, wie?


3
Natürlich. Sie müssen eine "Remote" Run / Debug-Konfiguration erstellen. Mehr hier
Vic

2
Ähm, diese Befehlszeilenargumente sind NUR LESEN ab 14.0.2. Sie können nur einige davon bearbeiten, was zur Lösung des Problems in dieser Frage nicht beiträgt. Irgendeine Idee, wie man das behebt?
Nuzzolilo


Antworten:


372

Ja! So richten Sie es ein.

Konfiguration ausführen

Erstellen Sie eine Remote-Run-Konfiguration:

  1. Ausführen -> Konfigurationen bearbeiten ...
  2. Klicken Sie oben links auf das "+"
  3. Wählen Sie im linken Bereich die Option "Remote"
  4. Wähle einen Namen (ich habe meinen "Remote-Debugging" genannt)
  5. Klicken Sie zum Speichern auf "OK":

Geben Sie hier die Bildbeschreibung ein

JVM-Optionen

Die obige Konfiguration enthält drei schreibgeschützte Felder. Dies sind Optionen, die die JVM anweisen, Port 5005 für das Remote-Debugging zu öffnen, wenn Sie Ihre Anwendung ausführen. Fügen Sie die entsprechende Option zu den JVM-Optionen der Anwendung hinzu, die Sie debuggen. Eine Möglichkeit, dies zu tun, wäre folgende:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Es hängt jedoch davon ab, wie Sie Ihre Anwendung ausführen. Wenn Sie nicht sicher sind, welche der drei für Sie zutrifft, beginnen Sie mit der ersten und gehen Sie die Liste durch, bis Sie diejenige finden, die funktioniert.

Sie können zu ändern suspend=n, suspend=yum Ihre Anwendung zu zwingen, zu warten, bis Sie eine Verbindung zu IntelliJ herstellen, bevor sie gestartet wird. Dies ist hilfreich, wenn der Haltepunkt, den Sie erreichen möchten, beim Start der Anwendung auftritt.

Debuggen

Starten Sie Ihre Anwendung wie gewohnt, wählen Sie dann in IntelliJ die neue Konfiguration aus und klicken Sie auf "Debuggen".

Geben Sie hier die Bildbeschreibung ein

IntelliJ stellt eine Verbindung zur JVM her und initiiert das Remote-Debugging.

Sie können die Anwendung jetzt debuggen, indem Sie Ihrem Code bei Bedarf Haltepunkte hinzufügen. Die Ausgabe der Anwendung wird weiterhin dort angezeigt, wo sie zuvor ausgeführt wurde, aber Ihre Haltepunkte werden in IntelliJ angezeigt.


2
Die Option "Remote" fehlt in meinem Intellij IDEA 15.0.2 auf dem Mac OS El Capitan. Wie kann ich diese Option bekommen?
user674669

@ user674669 Ich bin nicht sicher. Vielleicht Remoteist es in der Community Edition nicht verfügbar? Ich benutze die kostenpflichtige Version. Kann jemand mit der Community Edition bestätigen?
Cory Klein

@CoryKlein Wissen Sie, wie Sie die Ausgabe System.out.printlnin IntelliJ beim Remote-Debugging abrufen können ?
Don Rhummy

1
@DonRhummy Wenn Sie herausfinden, wie, würde ich diese Informationen gerne zu dieser Antwort hinzufügen, aber AFAIK IntelliJ unterstützt derzeit nicht die Weiterleitung von stdout und stderr von einer Remote-Anwendung zurück an IntelliJ.
Cory Klein

Wenn der Remote-Server nur über ssh zugänglich ist, wie geben wir die Schlüsseldatei an?
Vach

44

Es ist möglich, aber Sie müssen einige JVM-Flags hinzufügen, wenn Sie Ihre Anwendung starten.

Sie müssen die Remote-Debug-Konfiguration hinzufügen: Konfiguration bearbeiten -> Remote.

Dann finden Sie im angezeigten Dialogfenster Parameter, die Sie zur Programmausführung hinzufügen müssen, wie:

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

Wenn Ihre Anwendung gestartet wird, können Sie Ihren Debugger anhängen. Wenn Ihre Anwendung warten soll, bis der Debugger verbunden ist, ändern Sie einfach das Suspend-Flag in y ( suspend=y)


Es hat mich verwirrt, dass Sie die folgenden Eingaben bearbeiten und diese dann die obigen
Carl G

7
Ähm, diese Befehlszeilenargumente sind NUR LESEN ab 14.0.2. Sie können einige davon bearbeiten. Irgendeine Idee, wie man das behebt?
Nuzzolilo

1
An welchen Prozess hängen Sie an, indem Sie diese Optionen festlegen?
Nuzzolilo

5
Zuerst hat einer für mich gearbeitet. Hinweis für andere - Ich musste dies vor dem Flag -jar angeben.
Jim

2
@Nuzzolilo, die in der Idee angezeigten Befehlszeilenargumente dienen nur zu Anzeigezwecken und sind daher schreibgeschützt. Sie sollen nicht zur Idee hinzugefügt werden, sondern zur Remote-Java-Anwendung, die Sie debuggen möchten.
Ganesh Krishnan

6

in AndroidStudio oder Idee

  1. Konfigurieren Sie die Anwendung wird debuggen, öffnen Sie Konfigurationen bearbeiten

"VM-Optionen" hinzufügen Konfiguration “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” "Adresse speichern "

Geben Sie hier die Bildbeschreibung ein

  1. Konfigurieren Sie den Remote-Debugger, wenn er nicht beendet wird. Klicken Sie zum Hinzufügen auf +

Geben Sie "Port" wie in Schritt 1 "Adresse" an. Geben Sie hier die Bildbeschreibung ein


6

Vergessen Sie auch nicht, dass Sie in der App JAVA_OPTS das Flag "-Xdebug" hinzufügen müssen, wenn Sie im Debug-Modus eine Verbindung herstellen möchten.


0

Außerdem verwende ich die Tomcat-GUI-App (in meinem Fall: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Gehen Sie zur Registerkarte Java :

    Geben Sie hier die Bildbeschreibung ein

  • Legen Sie Ihre Java-Eigenschaften fest, zum Beispiel:

    Java virtuelle Maschine

    C: \ Programme \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Java virtuelle Maschine

    C: \ tomcat \ bin \ bootstrap.jar; C: \ tomcat \ bin \ tomcat-juli.jar

    Java-Optionen :

    -Dcatalina.home = C: \ tomcat

    -Dcatalina.base = C: \ tomcat

    -Djava.io.tmpdir = C: \ tomcat \ temp

    -Djava.util.logging.config.file = C: \ tomcat \ conf \ logging.properties

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

    Java 9-Optionen :

    --add-opens = java.base / java.lang = ALL-UNNAMED

    --add-opens = java.base / java.io = ALL-UNNAMED

    --add-opens = java.rmi / sun.rmi.transport = ALL-UNNAMED

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.