J'ai une application Java s'exécutant sur une machine Linux. Je lance l'application Java à l'aide des éléments suivants:
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 Windows XP et essaie de me connecter à cette application. J'ai ouvert le port dans Windows également.
Les deux machines sont sur le réseau local, mais je n'arrive pas à connecter le débogueur à l'application Java. Qu'est-ce que je fais mal?
Edit: J'ai remarqué que certaines personnes coupent et collent l'invocation ici. La réponse que j'ai donnée au départ ne concernait que le PO. Voici un style d’invocation plus moderne (incluant l’utilisation du port plus conventionnel de 8000):
Java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>
La réponse originale suit.
Essaye ça:
Java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp
Deux points ici:
runjdwp
.Pour JDK 1.3 ou 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 les nouveaux JDK:
-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 la version 5.0, l'option -agentlib: jdwp est utilisée pour charger et spécifier les options de l'agent JDWP. Pour les versions antérieures à la version 5.0, les options -Xdebug et -Xrunjdwp sont utilisées (l'implémentation 5.0 prend également en charge les options -Xdebug et -Xrunjdwp, mais la nouvelle option -agentlib: jdwp est préférable, car l'agent JDWP dans la version 5.0 utilise l'interface JVM TI pour VM plutôt que l'ancienne interface JVMDI)
Une dernière chose à noter, de documentation de l’interface JVM Tool :
JVM TI a été introduit à JDK 5.0. JVM TI remplace l'interface JVMPI Java et l'interface de débogage Java de la machine virtuelle (JVMDI) qui, à partir du kit JDK 6, ne sont plus fournies.
Pas:
Voir Guide pas à pas sur Java débogage distant pour plus de détails.
Réponse couvrant Java> = 9:
Pour Java 9+, l'option JVM doit être légèrement modifiée en préfixant l'adresse avec l'adresse IP de la machine hébergeant la machine virtuelle, ou simplement *
:
-agentlib:jdwp=transport=dt_socket,server=y,address=*:8000,suspend=n
Ceci est dû à un changement noté dans https://www.Oracle.com/technetwork/Java/javase/9-notes-3745703.html#JDK-8041435 .
Pour Java <9, le numéro de port est suffisant pour se connecter.
Voici comment configurer Eclipse Debugger pour le débogage à distance:
Paramètres Eclipse:
1.Cliquez sur le bouton Exécuter
2.Sélectionnez les configurations de débogage
3.Sélectionnez le “Remote Java Application”
4. Nouvelle configuration
Pour JBoss:
1.Changez le /path/toJboss/jboss-eap-6.1/bin/standalone.conf
dans votre machine virtuelle comme suit: Supprimez le commentaire de la ligne suivante en supprimant le #:
Java_OPTS="$Java_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
Pour Tomcat:
Dans le fichier catalina.bat:
É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.