web-dev-qa-db-fra.com

Comment puis-je déboguer des applications sous Java Web Start (JNLP)?

Je sais comment je peux déboguer une télécommande Java VM avec Eclipse, mais comment puis-je le faire avec un Java Web Démarrer le programme. J'ai un problème qui ne se produit que dans Java Web Start. Il doit être lié à la sécurité.

J'ai besoin d'une solution qui fonctionnera avec un Java VM comme 1.6.0_12.

48
Horcrux7

C'est à peu près la même chose que pour tout autre processus Java que vous souhaitez déboguer à distance: vous devez configurer certains arguments pour le VM (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345), puis connectez-vous au port indiqué. Dans Java webstart 6.0, cela peut être fait avec l'option -J, dans la version précédente via la variable d'environnement JAVAWS_VM_ARGS. Voir les détails ici .

25
Kai Huppmann

Démarrez le JWS VM manuellement. De cette façon, vous pouvez fournir les paramètres de démarrage pour ouvrir le port de débogage. Voici un description , il se présente comme suit:

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
23
mkoeller

En ce qui concerne les versions plus récentes de Java (Java 8u20 + et Java 7u70 +), j'ai constaté que des paramètres tels que -Xrunjdwp ne peuvent pas être transmis directement ni utiliser JAVAWS_VM_ARGS. Message Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 a commencé à apparaître dans la sortie de la console.

La seule solution qui a fonctionné pour moi a été de passer ces arguments dans la variable système Java_TOOL_OPTIONS.

15
Vojtěch Tůma

Vous pouvez également fournir le paramètre de débogage à l'exécutable javaws à l'aide de l'option -J

Exemple:

javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
9
Marco Montel

Vous devrez effectuer les opérations suivantes:

  1. Activez les journaux et le suivi Java Java dans le Java> Avancé. Java Control Panel: logs and tracing

  2. Activer les paramètres de débogage Java (facultatif mais utile, c'est-à-dire problèmes avec la négociation tls/ssl comme close_notify ou handshake_failure) et lancement du JNLP, il y a deux façons de le faire:

    2.a. Téléchargez le fichier JNLP et exécutez-le à partir de la ligne de commande (la commande SET n'est pas requise dans ce cas particulier).

    set Java_TOOL_OPTIONS=-Djavax.net.debug=all
    javaws -wait jnlp.jnlp
    

    2.b. Ajouter des arguments (c'est-à-dire -Djavax.net.debug=all) pour la JVM dans le Java Control Panel> Java> View (ce n'est pas obligatoire dans ce cas particulier), et lancez le fichier JNLP à partir du navigateur :

    Java Control Panel: jvm arguments

  3. Les journaux et les traces se trouvent dans le répertoire log du Java Deployment Home d'où je colle ces emplacements:

    une. Windows XP: %HOME%\Application Data\Sun\Java\Deployment

    b. Windows 7/Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment

    c. Linux/Solaris: %HOME%/.Java/deployment

Avec javax.net.debug = tout, vous verrez la poignée de main si le pot à l'intérieur du jnlp est chargé à partir d'une connexion https. Ce genre de problèmes est difficile à déboguer.

...
%% 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:
4
lmiguelmh

Avec Java 8 et Windows 10, ouvrez l'invite de commande (cmd.exe) et tapez ceci:

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
2
qwertzguy

Pour déboguer une application Web Start sous Linux, créez un script Shell ~/bin/javaws-debug.sh avec l'invocation javaws en mode débogage comme décrit ci-dessus:

~/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 "$@"

Ensuite, dans votre navigateur, choisissez ce script comme application à invoquer sur les fichiers jnlp.

Par exemple, dans Firefox, allez dans Edition → Préférences → Applications, Type de contenu: Java Web Start, et choisissez "Utiliser autre" dans Action et choisissez le script dans la boîte de dialogue "Sélectionner une application d'assistance" . Dans Chrome, vous devez modifier les paramètres du système Linux. Dans KDE, accédez à Paramètres système → Associations de fichiers, types connus: application: fichier x-Java-jnlp, ajoutez une nouvelle application, choisissez ~/bin/javaws-debug. sh dans la boîte de dialogue "Choisir une application pour l'application/fichier x-Java-jnlp".

Une fois votre navigateur configuré, Java L'application Web Start commencera à utiliser votre wrapper, ce qui permettra au débogueur de se connecter sur le port 8989.

2
Nicholas Sushkin

Avez-vous essayé d'imprimer un journal de débogage? C'est une chose utile à avoir en tout cas, et pourrait aider dans ce cas.

Si vous voulez un vrai débogage, voir par ex. ici: Comment puis-je déboguer sous WebStart?

1
sleske