Remote-Debugging einer Java-Anwendung

Lesezeit: 6 Minuten

Ich habe eine Java-Anwendung, die auf einem Linux-Computer ausgeführt wird. Ich führe die Java-Anwendung mit folgendem aus:

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

Ich habe Port 4000 für TCP auf dieser Linux-Maschine geöffnet. Ich verwende Eclipse von einem Windows XP-Computer und versuche, eine Verbindung zu dieser Anwendung herzustellen. Ich habe den Port auch in Windows geöffnet.

Beide Maschinen befinden sich im LAN, aber ich kann den Debugger anscheinend nicht mit der Java-Anwendung verbinden. Was mache ich falsch?

  • stackoverflow.com/a/46171836/1619407

    – Alessandro Giusa

    12. September 2017 um 8:47 Uhr

Remote Debugging einer Java Anwendung
Chris Jester-Young

Bearbeiten: Mir ist aufgefallen, dass einige Leute den Aufruf hier ausschneiden und einfügen. Die Antwort, die ich ursprünglich gegeben habe, war nur für das OP relevant. Hier ist ein modernerer Aufrufstil (einschließlich der Verwendung des konventionelleren Ports 8000):

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

Ursprüngliche Antwort folgt.


Versuche dies:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

Hier zwei Punkte:

  1. Keine Leerzeichen in der runjdwp Möglichkeit.
  2. Optionen stehen vor dem Klassennamen. Alle Argumente, die Sie nach dem Klassennamen haben, sind Argumente für Ihr Programm!

  • Offizielle JDPA-Verbindungs- und Aufrufdokumentation

    – Mat Gessel

    22. Mai 2014 um 22:09 Uhr

  • @DJGummikuh Schön! Ich habe den Beitrag aktualisiert, um den neueren Stil zu verwenden -agentlib Option für Ihr Schneid- und Klebevergnügen. 🙂

    – Chris Jester-Young

    9. August 2015 um 3:23 Uhr

  • Muss der Quellcode für die Remote-App immer auf dem Computer vorhanden sein, auf dem wir das Remote-Debugging durchführen?

    – MasterJoe

    12. Juli 2017 um 23:58 Uhr

  • Du musst wissen der Quellcode. Entweder Sie haben die .java-Dateien oder Sie haben die .jar / .class-Dateien mit dem Decompiler kombiniert. IDE wie Eclipse kann einen Decompiler wie JDecompiler installiert haben, sodass Sie die .class-Datei debuggen können, als wäre es eine .java-Datei (mit Ausnahme der Kommentare).

    – Iwan Satria

    3. Februar 2018 um 13:04 Uhr

  • Es lohnt sich, einen Kommentar von diesem stackoverflow.com/a/138518/500902 zu wiederholen: “Da Java 9 “Adresse=1044” nicht immer auf allen Schnittstellen lauscht. “Adresse=*:1044″ bewirkt, dass sich Java 9+ wie Java 8 verhält”. Erlauben Sie das Debuggen von einem anderen Host

    – Marwin

    28. Februar 2019 um 15:10 Uhr

Remote Debugging einer Java Anwendung
Sairam Krisch

Für JDK 1.3 oder früher:

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

Für JDK 1.4

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

Für neueres JDK:

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

Bitte ändern Sie die Portnummer entsprechend Ihren Anforderungen.

Von Java-Technologien

Ab Version 5.0 wird die Option -agentlib:jdwp verwendet, um Optionen für den JDWP-Agenten zu laden und anzugeben. Für Versionen vor 5.0 werden die Optionen -Xdebug und -Xrunjdwp verwendet (die 5.0-Implementierung unterstützt auch die Optionen -Xdebug und -Xrunjdwp, aber die neuere Option -agentlib:jdwp ist vorzuziehen, da der JDWP-Agent in 5.0 die JVM TI-Schnittstelle dazu verwendet die VM und nicht die ältere JVMDI-Schnittstelle)

Eine weitere Sache zu beachten, von Dokumentation der JVM-Tool-Schnittstelle:

JVM TI wurde mit JDK 5.0 eingeführt. JVM TI ersetzt das Java Virtual Machine Profiler Interface (JVMPI) und das Java Virtual Machine Debug Interface (JVMDI), die ab JDK 6 nicht mehr bereitgestellt werden.

  • Folgendes funktioniert mit den Standardeinstellungen von Eclipse: -agentlib:jdwp=transport=dt_socket,server=y,address=8000

    – Eisbecher

    4. September 2014 um 9:30 Uhr


Remote Debugging einer Java Anwendung
Gaurav

Schritte:

  1. Starten Sie Ihre Remote-Java-Anwendung mit Debugging-Optionen, wie im obigen Beitrag beschrieben.
  2. Konfigurieren Sie Eclipse für das Remote-Debugging, indem Sie Host und Port angeben.
  3. Starten Sie das Remote-Debugging in Eclipse und warten Sie, bis die Verbindung hergestellt ist.
  4. Haltepunkt einrichten und debuggen.
  5. Wenn Sie vom Start der Anwendung an debuggen möchten, verwenden Sie suspend=y , dies hält die Remote-Anwendung angehalten, bis Sie eine Verbindung von Eclipse herstellen.

Sehen Schritt-für-Schritt-Anleitung zum Java-Remote-Debugging für alle Details.

  • Die “Schritt-für-Schritt-Anleitung” im Link verwendet einige veraltete Optionen.

    – Joshua Goldberg

    25. September 2020 um 18:04 Uhr

Antwort zu Java >= 9:

Für Java 9+ muss die JVM-Option geringfügig geändert werden, indem der Adresse die IP-Adresse des Computers vorangestellt wird, der die JVM hostet, oder einfach nur *:

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

Dies ist auf eine Änderung zurückzuführen, die in vermerkt ist https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435.

Für Java < 9 reicht die Portnummer aus, um eine Verbindung herzustellen.

1646257629 109 Remote Debugging einer Java Anwendung
Herr Schwarz

Das möchte ich betonen Die Reihenfolge der Argumente ist wichtig.

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar Befehl öffnet den Debugger-Port,

aber java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 Befehl nicht. Es wird alles danach passieren app.jar als Kommandozeilenargumente.

  • Ich vermute, das liegt daran, dass in Ihrem zweiten Beispiel alles nach “app.jar” als Argumente an Ihre Hauptmethode übergeben wird

    – xoX Zeus Xox

    13. November 2019 um 13:31 Uhr

  • @xoXZeusXox ha ha. Ja, es ging als Argumente durch. Danke für die Erwähnung.

    – Herr Schwarz

    19. November 2019 um 21:45 Uhr

  • Das scheint neu für Java 11 zu sein

    – Petronius

    29. Oktober 2020 um 12:10 Uhr

1646257629 802 Remote Debugging einer Java Anwendung
Pritam Banerjee

So sollten Sie Eclipse Debugger für das Remote-Debugging einrichten:

Eclipse-Einstellungen:

1.Klicken Sie auf die Schaltfläche Ausführen
2.Wählen Sie die Debug-Konfigurationen aus
3.Wählen Sie die „Remote-Java-Anwendung“
4.Neue Konfiguration

  • Name: GatewayPortalProject
  • Projekt : GatewayPortal-Portlet
  • Verbindungstyp: Socket Attach
  • Verbindungseigenschaften: i) localhost ii) 8787

Für JBoss:

1. Ändern Sie die /path/toJboss/jboss-eap-6.1/bin/standalone.conf in Ihrer VM wie folgt: Kommentieren Sie die folgende Zeile aus, indem Sie das # entfernen:

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

Für Kater:

Im catalina.bat Datei :

Schritt 1:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

Schritt 2:

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

Schritt 3: Führen Sie Tomcat von der Eingabeaufforderung wie unten aus:

catalina.sh jpda start

Dann müssen Sie einstellen Haltepunkte in den Java-Klassen, die Sie debuggen möchten.

  • Ich vermute, das liegt daran, dass in Ihrem zweiten Beispiel alles nach “app.jar” als Argumente an Ihre Hauptmethode übergeben wird

    – xoX Zeus Xox

    13. November 2019 um 13:31 Uhr

  • @xoXZeusXox ha ha. Ja, es ging als Argumente durch. Danke für die Erwähnung.

    – Herr Schwarz

    19. November 2019 um 21:45 Uhr

  • Das scheint neu für Java 11 zu sein

    – Petronius

    29. Oktober 2020 um 12:10 Uhr

1646257630 292 Remote Debugging einer Java Anwendung
JCompagner

für alle, die das Problem haben, dass, wenn Sie wirklich Remote-Debugging von einem Computer zum anderen durchführen, dann Folgendes verwenden:

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

ist nicht genug, weil das jetzt (zumindest auf Unix/OSX-Rechnern) an localhost bindet, sodass Sie nur von localhost aus eine Verbindung herstellen können.

Wenn Sie versuchen, dies aus der Ferne zu debuggen, wird Ihnen die Verbindung dafür verweigert. Ab Java 9 müssen Sie meiner Meinung nach Folgendes tun:

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

oder geben Sie eine IP an, die für Hut gebunden werden muss *

916450cookie-checkRemote-Debugging einer Java-Anwendung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy