web-dev-qa-db-fra.com

Débogage distant d'une application Java

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?

235
Guru

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:

  1. Pas d'espace dans l'option runjdwp.
  2. Les options viennent avant le nom de la classe. Tous les arguments que vous avez après le nom de la classe sont des arguments de votre programme!
450
Chris Jester-Young

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.

De notes techniques Java

À 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.

79
Sairam Krish

Pas:

  1. Démarrez votre application distante Java avec les options de débogage comme indiqué dans l'article ci-dessus.
  2. Configurez Eclipse pour le débogage distant en spécifiant l'hôte et le port.
  3. Démarrez le débogage à distance dans Eclipse et attendez que la connexion aboutisse.
  4. Configurez le point d'arrêt et le débogage.
  5. Si vous voulez déboguer à partir du début de l'application, utilisez suspend = y, l'application à distance sera suspendue jusqu'à ce que vous vous connectiez à partir d'Eclipse.

Voir Guide pas à pas sur Java débogage distant pour plus de détails.

27
Gaurav

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.

3
manouti

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

  • Nom: GatewayPortalProject
  • Projet: GatewayPortal-portlet
  • Type de connexion: Socket Attach
  • Propriétés de connexion: i) localhost ii) 8787

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.

1
Pritam Banerjee