web-dev-qa-db-fra.com

Quelles sont les options de ligne de commande Java à définir pour permettre le débogage de la machine virtuelle Java à distance?

Je sais qu'il y a quelques Java_OPTS à configurer pour déboguer à distance un programme Java.

Que sont-ils et que veulent-ils dire?

293
paulgreg

J'ai cet article dans les favoris de cette configuration pour Java 5 et inférieur.

Fondamentalement exécutez-le avec :

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044

Pour Java 5 et supérieur , exécutez-le avec:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044
277
Hans Sjunnesson

Avant Java 5.0, utilisez les arguments -Xdebug et -Xrunjdwp. Ces options fonctionneront toujours dans les versions ultérieures, mais elles fonctionneront en mode interprété au lieu de JIT, ce qui sera plus lent.

À partir de Java 5.0, il est préférable d'utiliser l'option unique -agentlib:jdwp:

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

Les options sur les arguments -Xrunjdwp ou agentlib:jdwp sont les suivantes:

  • transport=dt_socket: désigne le moyen utilisé pour se connecter à la JVM (le socket est un bon choix, il peut être utilisé pour déboguer un ordinateur distant)
  • address=8000: port TCP/IP exposé, pour se connecter à partir du débogueur,
  • suspend=y: si 'y', indique à la machine virtuelle Java d'attendre que le débogueur soit connecté pour commencer l'exécution, sinon (si 'n'), commence immédiatement l'exécution.
443
paulgreg

Depuis Java 9.0, JDWP ne prend en charge que les connexions locales par défaut. http://www.Oracle.com/technetwork/Java/javase/9-notes-3745703.html#JDK-8041435

Pour le débogage distant, il faut exécuter le programme avec *: dans l'adresse:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
49
Antony Shumskikh

Pour Java 1.5 ou supérieur:

Java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Pour Java 1.4:

Java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Pour Java 1.3:

Java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Voici la sortie d'un programme simple:

Java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled
7
thebiggestlebowski

Java

Java -Xdebug -Xrunjdwp: transport = dt_socket, serveur = y, adresse = 8001, suspendre = y -jar cible/cxf-boot-simple-0.0.1-SNAPSHOT.jar

address spécifie le port sur lequel il sera possible de déboguer

Maven

application Debug Spring Boot avec Maven: mvn spring-boot: exécutez -Drun.jvmArguments = "- Xdebug -Xrunjdwp: transport = dt_socket, serveur = y, suspendre = y, adresse = 8001"

4
Jovi Qiao

Ligne de commande

-Xdebug -Xrunjdwp: transport = dt_socket, serveur = y, suspendre = n, adresse = PORT_NUMBER

Gradle

classe de démarrage --debug-jvm

Maven

mvn spring-boot: exécutez -Drun.jvmArguments = "- Xdebug -Xrunjdwp: transport = dt_socket, serveur = y, suspendre = y, adresse = PORT_NUMBER

2
Santosh b

Il y a beaucoup de problèmes d'environnement si vous utilisez Maven. Donc, si vous démarrez votre programme à partir de maven, exécutez la commande mvnDebug à la place de mvn et attachez un débogueur sur le port 8000. Vous résolvez tous les problèmes d'environnement.

1
neves