293 votes

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 depuis une machine Windows XP et j'essaie de me connecter à cette application. J'ai également ouvert le port sous Windows.

Les deux machines sont sur le réseau local, mais je ne parviens pas à connecter le débogueur à l'application Java. Qu'est-ce que je fais de mal ?

523voto

Chris Jester-Young Points 102876

Edit : J'ai remarqué que certaines personnes coupent et collent l'invocation ici. La réponse que j'ai donnée à l'origine ne concernait que le PO. Voici un style d'invocation plus moderne (y compris 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.


Essayez ça :

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

Deux points ici :

  1. Aucun espace dans le runjdwp option.
  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 pour votre programme !

90voto

Sairam Krish Points 493

Pour JDK 1.3 ou antérieur :

-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 JDK plus récents :

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006

Veuillez modifier le numéro du port en fonction de vos besoins.

De technotes java

À partir de la version 5.0, l'option -agentlib:jdwp est utilisée pour charger et spécifier des options à l'agent JDWP. Pour les versions antérieures à 5.0, les options -Xdebug et -Xrunjdwp sont utilisées (l'implémentation de la version 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 de la version 5.0 utilise l'interface JVM TI avec la VM plutôt que l'ancienne JVMDI). VM plutôt que l'ancienne interface JVMDI).

Une dernière chose à noter, de Documentation sur l'interface de l'outil JVM :

La JVM TI a été introduite dans le JDK 5.0. La JVM TI remplace l'interface du profileur de la machine virtuelle Java (JVMPI) et l'interface de débogage de la machine virtuelle Java (JVMDI) qui, à partir du JDK 6, ne sont plus fournies.

35voto

manouti Points 10398

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 JVM, ou juste * :

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

33voto

Gaurav Points 121

Des pas :

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

Voir Guide pas à pas du débogage à distance de Java pour tous les détails.

14voto

MrBlack Points 109

Je tiens à souligner que l'ordre des arguments est important .

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar commande ouvre le port du débogueur ,

mais java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 commande n'a pas . Il passera tout après app.jar comme arguments de ligne de commande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X