Wie kann ich Debuggen von Anwendungen unter Java Web Start (JNLP)?
-
22-08-2019 - |
Frage
Ich weiß, wie ich einen Remote-Java-VM mit Eclipse debuggen kann, aber wie kann ich es mit einem Java-Web-Start-Programm. Ich habe ein Problem, das in Java Web Start erfolgt nur. Es muss Sicherheit.
Ich brauche eine Lösung, die mit einem aktuellen Java-VM wie 1.6.0_12 funktionieren wird.
Lösung
Es ist ziemlich die gleiche wie bei jedem anderen Java-Prozess, den Sie remote debuggen mögen: Sie haben einige Argumente für die VM (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345
) einzurichten und dann zu dem angegeben Port zu verbinden. In Java webstart 6.0 kann dies mit der Option -J erfolgen, in früheren Version über Umgebungsvariable JAVAWS_VM_ARGS. Details sehen hier .
Andere Tipps
Starten Sie manuell die JWS VM. Auf diese Weise können Sie die Startparameter bieten den Debug-Port zu öffnen. Hier ist ein Beschreibung , geht es wie folgt aus:
set JAVAWS_TRACE_NATIVE=1
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws http://server:port/descriptor.jnlp
Wie bei neueren Versionen von Java (Java 8u20 + und Java 7u70 +) i erlebt, dass Parameter wie -Xrunjdwp nicht direkt noch mit JAVAWS_VM_ARGS weitergegeben werden.
Botschaft
Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
begann im Konsolenausgabe zu zeigen.
Die einzige Lösung, die für mich gearbeitet wurde diese Argumente in JAVA_TOOL_OPTIONS Systemvariable zu übergeben.
Sie können auch die Debug-Parameter an den javaws ausführbaren bieten die Option -J mit
Beispiel:
javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
Sie müssen folgendes tun:
-
Aktivieren Sie die Java-Protokolle und in der Java-Systemsteuerung> Erweiterte Tracing.
-
Aktivieren Parameter für das Debuggen von Java (optional, aber nützlich heißt Probleme mit TLS / SSL-Handshake als close_notify oder handshake_failure) und dem Start der JNLP, gibt es zwei Möglichkeiten, wie Sie es tun können:
2.a. Laden Sie die JNLP-Datei und führen Sie es von der Kommandozeile (der
SET
Befehl wird nicht in diesem speziellen Fall erforderlich).set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all javaws -wait jnlp.jnlp
2.b. In Argumenten (das heißt
-Djavax.net.debug=all
) für die JVM in der Java-Systemsteuerung> Java> Ansicht (dies nicht in diesem speziellen erforderlich ist), und starten Sie die JNLP-Datei von Browser: -
Die Protokolle und Spuren werden im
log
Verzeichnis aus dem Java Deployment Startseite von wo ich fügen diese Orte:a. Windows XP:
%HOME%\Application Data\Sun\Java\Deployment
b. Windows 7 / Vista:
%APPDATA%\..\LocalLow\Sun\Java\Deployment
c. Linux / Solaris:
%HOME%/.java/deployment
Mit javax.net.debug = all werden Sie den Handshake sehen, ob das Glas im Inneren des jnlp von einer https-Verbindung geladen wird. Diese Art von Problemen sind schwer zu debuggen.
...
%% No cached client session
*** ClientHello, TLSv1.2
...
***
...
Java Web Start Main Thread, received EOFException: error
Java Web Start Main Thread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Java Web Start Main Thread, SEND TLSv1.2 ALERT: fatal, description = handshake_failure
Java Web Start Main Thread, WRITE: TLSv1.2 Alert, length = 2
Java Web Start Main Thread, called closeSocket()
#### Java Web Start Error:
Mit Java 8 und Windows 10, öffnen Eingabeaufforderung (cmd.exe) und geben Sie diese:
set JAVAWS_TRACE_NATIVE=1
set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
javaws java-app.jnlp
Haben Sie versucht, das Drucken eines Debug-Protokoll? Das ist eine nützliche Sache auf jeden Fall haben, und könnte in diesem Fall helfen.
Wenn Sie echtes Debuggen möchten, finden Sie zum Beispiel Hier: Wie kann ich debuggen unter WebStart?
ein Web-Anwendung startet in Linux zu debuggen, ein Shell-Skript ~ / ist / javaws-debug.sh mit dem javaws Aufruf im Debug-Modus erstellen, wie oben beschrieben:
~ / bin / javaws-debug.sh:
#!/bin/sh
export JAVAWS_TRACE_NATIVE=1
export JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws "$@"
Dann in Ihrem Browser, wählen Sie das Skript als die Anwendung auf jnlp Dateien aufzurufen.
Zum Beispiel in Firefox, gehen → Einstellungen → Anwendungen zu bearbeiten, Content Type: Java Web Start, und "Use Andere" in Aktion wählen und das Skript aus dem "Select Helper Application" Dialog auswählen. In Chrome, müssen Sie Linux-System-Einstellungen ändern. In KDE gehen → Dateizuordnungen zu Systemeinstellungen, Bekannte Typen: Anwendung: x-java-jnlp-Datei, eine neue Anwendung hinzufügen, wählen Sie ~ / bin / javaws-debug.sh aus der „Anwendung wählen für application / x-java -jnlp-Datei“Dialog.
Wenn der Browser konfiguriert ist, Java Web Start Anwendung starten Sie Ihre Wrapper, der Debugger auf Port 8989 verbinden ermöglichen.