Question

Je sais comment je peux déboguer une machine virtuelle Java à distance avec Eclipse, mais comment puis-je faire avec un programme Java Web Start. J'ai un problème qui se produit uniquement dans Java Web Start. Il doit être lié à la sécurité.

Je besoin d'une solution qui fonctionnera avec une machine virtuelle Java actuelle comme 1.6.0_12.

Était-ce utile?

La solution

Il est tout à fait le même comme avec tout autre processus Java que vous souhaitez déboguer à distance: Vous devez configurer des arguments pour la machine virtuelle (-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345 ), puis se connecter au port donné. En Java 6.0 webstart cela peut être fait avec l'option -J, dans la version précédente par JAVAWS_VM_ARGS variable d'environnement. Voir les détails .

Autres conseils

Lancer la JWS VM manuellement. De cette façon, vous pouvez fournir les paramètres de démarrage pour ouvrir le port de débogage. Voici une , il va comme ceci:

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

En ce qui concerne les nouvelles versions de Java (Java 8u20 + et Java 7u70 +) i connu que des paramètres tels que -Xrunjdwp ne peuvent être transmises directement, ni en utilisant JAVAWS_VM_ARGS. Message Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 ont commencé à apparaître dans la sortie de la console.

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

Vous pouvez également fournir le paramètre de débogage à l'exécutable javaws en utilisant 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

Vous devrez effectuer les opérations suivantes:

  1. Activer les journaux Java et le traçage dans le Panneau de configuration Java> Avancé. Panneau de configuration Java: journaux et traçage

  2. Activer les paramètres pour le débogage Java (en option, mais utiles à savoir des problèmes avec poignée de main tls / ssl comme close_notify ou handshake_failure) et le lancement du JNLP, il y a deux façons dont vous pouvez le faire:

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

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

    2.b. Ajouter des arguments (à savoir -Djavax.net.debug=all) pour la machine virtuelle Java dans le Panneau de configuration Java> Java> Voir (ce n'est pas nécessaire dans ce cas particulier), et lancez le fichier JNLP du navigateur:

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

    a. 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 ce que 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 sont difficiles à 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:

Avec Java 8 et Windows 10, l'invite de commande d'ouverture (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

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

Si vous voulez le débogage réel, voir par exemple ici: Comment puis-je déboguer sous WebStart?

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 l'application d'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 une autre » dans l'action et choisissez le script de la boîte de dialogue « Sélectionner l'application auxiliaire ». Dans Chrome, vous devez modifier les paramètres du système Linux. Dans KDE, allez dans Paramètres système → Associations de fichiers, types connus: application: x-java-jnlp-fichier, ajoutez une nouvelle application, choisissez ~ / bin / javaws-debug.sh de la « Choisissez l'application pour l'application / x-java -jnlp fichier » boîte de dialogue.

Une fois que votre navigateur est configuré, l'application Java Web Start commencer à utiliser votre enveloppe, qui permettra débogueur de se connecter sur le port 8989.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top