Sie müssen den Host auch beim Remote-Debugging mit Java 9 oder höher angeben

Umgebung

OS

Windows 10 64bit

Java

> java --version
openjdk 11.0.3 2019-04-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.3+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.3+7, mixed mode)

Implementierung zur Überprüfung

Ordnerstruktur


> tree /f
├─build
│  └─classes
│     └─java
│         └─main
│                 Hoge.class
└─src
    └─main
        └─java
                Hoge.java

Hoge.java


class Hoge {
    public static void main(String... args) {
        System.out.println("Hello World");
    }
}

Vor Java 9

Fügen Sie beim Debuggen eines Java-Programms mit Eclipse den Startoptionen den folgenden Spruch hinzu.


> java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y -cp build\classes\java\main Hoge

Vor Java 9 konnten Sie den Debugger auf diese Weise remote mit dem 8000-Port verbinden (natürlich müssen Sie den Port offen halten).

Java 9 oder höher führt zu einem Fehler

Wenn ich jedoch in Java 9 oder höher versuche, eine Verbindung zu einer JVM herzustellen, die mit dieser Option remote mit einem Debugger gestartet wurde, wird der folgende Fehler angezeigt.

無題.png

In Java 9 können Sie keine Remoteverbindung mehr herstellen, wenn Sie keinen Host angeben

JDK 9 Release Notes | Notes and Changes

JDWP socket connector accept only local connections by default The JDWP socket connector has been changed to bind to localhost only if no ip address or hostname is specified on the agent command line. A hostname of asterisk (*) may be used to achieve the old behavior which is to bind the JDWP socket connector to all available interfaces; this is not secure and not recommended.

Wenn Sie in Java 9 keinen Host angeben, wird dieser automatisch an "localhost" gebunden, und es scheint, dass Sie keine Remoteverbindung mehr herstellen können.

Um wie zuvor eine Verbindung von einer beliebigen Fernbedienung aus herstellen zu können, können Sie dies mit * like address = *: 8000 tun. (Es scheint jedoch, dass es nicht empfohlen wird, da es nicht gut für die Sicherheit ist [^ 1])

[^ 1]: Bei der Verbindung mit dem Debugger handelt es sich um eine Nicht-Produktionsumgebung. Ich glaube, Sie müssen sich darüber keine Sorgen machen. e? Verbinden Sie die Produktion mit dem Debugger? Ahh

* Versuchen Sie, eine Verbindung herzustellen, indem Sie angeben

> java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=*:8000,suspend=y -cp build\classes\java\main Hoge

無題.jpg

in Verbindung gebracht.

Referenz

Recommended Posts

Sie müssen den Host auch beim Remote-Debugging mit Java 9 oder höher angeben
Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
Ermitteln Sie die maximale Heap-Größe, wenn Sie in Java die Option -Xmx oder -XX: MaxRAM angeben
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
So debuggen Sie Java 9 oder höher remote
[Java] Warum verwenden Sie die Benutzeroberfläche (Spring ist ebenfalls verfügbar)?
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen
Code, der verwendet wird, wenn Sie Json nur mit Standardbibliotheken in Java (verbesserte Version) verarbeiten möchten. Gson ist nicht erforderlich
Geben Sie ClassPath an, wenn Sie jupyter + Java mit WSL verwenden
Wenn Sie die Methode außerhalb verwenden möchten
So löschen Sie den dem Benutzer zugeordneten Tweet, wenn Sie ihn gleichzeitig löschen
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
[Java] Holen Sie sich das Datum 10 Tage später mit der Calendar-Klasse
HTTPS-Verbindung mit Java zum selbstsignierten Zertifikatsserver
[LeJOS] Lassen Sie uns den EV3-Motor mit Java fernsteuern
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Was Java-Ingenieure benötigen, um sich auf die Java 11-Version vorzubereiten
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
So reduzieren Sie die Programmlast ein wenig, wenn Sie Zeichen mit JAVA kombinieren
Gibt an, ob die Serverseite zum Zeitpunkt der Systemwiederherstellung mit Kotlin oder Java erstellt werden soll