Débogage à distance d'une application Java
J'ai une application java fonctionnant sur une machine linux. J'exécute l'application java en utilisant ce qui suit:
java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n
J'ai ouvert le port 4000 pour TCP sur cette machine Linux. J'utilise eclipse à partir de la machine Windows XP et j'essaie de me connecter à cette application. J'ai également ouvert le port dans Windows.
Les deux machines sont sur le réseau local mais je n'arrive pas à connecter le débogueur à l'application Java. Ce que je fais mal?
5 answers
Edit: J'ai remarqué que certaines personnes coupent et collent l'invocation ici. La réponse que j'ai donnée à l'origine était pertinente pour le PO seulement. Voici un style d'invocation plus moderne (y compris en utilisant le port plus conventionnel de 8000):
java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>
Réponse originale suit.
, Essayez ceci:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp
Deux points ici:
- Aucun espace dans l'option
runjdwp
. - Les options viennent avant le nom de la classe. Tous les arguments que vous avez après le nom de la classe sont arguments à votre programme!
Pour JDK 1.3 ou une version antérieure:
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
Pour JDK 1.4
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
Pour JDK plus récent:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
, Veuillez modifier le numéro de port en fonction de vos besoins.
À Partir de java technotes
À partir de la version 5.0, l'option-agentlib: jdwp est utilisée pour charger et spécifier options pour la JDWP de l'agent. Pour les versions antérieures à 5.0, le-Xdebug et Les options-Xrunjdwp sont utilisées (l'implémentation 5.0 prend également en charge les options-Xdebug et-Xrunjdwp, mais les plus récentes - agentlib: l'option jdwp est préférable car l'agent JDWP dans 5.0 utilise l'interface JVM TI pour VM plutôt que l'ancienne interface JVMDI)
Une autre chose à noter, à partir de Documentation de l'interface de l'outil JVM :
JVM TI a été introduit à JDK 5.0. JVM TI remplace l'interface Java Virtual Machine Profiler (JVMPI) et l'Interface Java Virtual Machine Debug (JVMDI) qui, à partir de JDK 6, ne sont plus fournies.
Étapes:
- Démarrez votre application java distante avec les options de débogage comme indiqué dans le post ci-dessus.
- Configurez Eclipse pour le débogage à distance en spécifiant l'hôte et le port.
- Démarrez le débogage à distance dans Eclipse et attendez que la connexion réussisse.
- Configurez le point d'arrêt et déboguez.
- Si vous souhaitez déboguer à partir du début de l'application , utilisez suspend=y, cela maintiendra l'application distante suspendue jusqu'à ce que vous vous connectiez à partir d'eclipse.
Voir Étape guide étape par étape sur Java remote debugging pour plus de détails.
Voici comment configurer le débogueur Eclipse pour le débogage à distance:
Eclipse Paramètres:
1.Cliquez sur le bouton Exécuter
2.Sélectionnez les configurations de débogage
3.Sélectionnez l'application Java distante
4.Nouvelle configuration
- Nom: GatewayPortalProject
- Projet: GatewayPortal-portlet
- Type de connexion: Prise Joindre
- Propriétés de connexion: i) localhost ii) 8787
Pour JBoss:
1.Modifiez le {[4] } dans votre machine virtuelle comme suit: Décommentez la ligne suivante en supprimant le#:
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
Pour Tomcat :
Dans catalina.chauve-souris fichier :
Étape 1:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
Étape 2:
JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
Étape 3: Exécutez Tomcat à partir de l'invite de commande comme ci-dessous:
catalina.sh jpda start
Ensuite, vous devez définir points d'arrêt dans les classes Java que vous souhaitez déboguer.
La meilleure option de débogage est de créer des journaux et d'analyser des journaux. Mais dans certains cas, nous devons déboguer l'application Web déployée sur le serveur.
VoirDéboguer à distance une application Web java lien. Le flux complet de débogage à distance est décrit ici. J'espère que ça aidera.