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?

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:
- Keine Leerzeichen in der
runjdwp
Möglichkeit.
- Optionen stehen vor dem Klassennamen. Alle Argumente, die Sie nach dem Klassennamen haben, sind Argumente für Ihr Programm!

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.

Gaurav
Schritte:
- Starten Sie Ihre Remote-Java-Anwendung mit Debugging-Optionen, wie im obigen Beitrag beschrieben.
- Konfigurieren Sie Eclipse für das Remote-Debugging, indem Sie Host und Port angeben.
- Starten Sie das Remote-Debugging in Eclipse und warten Sie, bis die Verbindung hergestellt ist.
- Haltepunkt einrichten und debuggen.
- 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.
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.

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.

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.

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 *
9164500cookie-checkRemote-Debugging einer Java-Anwendungyes
stackoverflow.com/a/46171836/1619407
– Alessandro Giusa
12. September 2017 um 8:47 Uhr