Quelles sont les options de ligne de commande Java à définir pour permettre le débogage à distance de la JVM?
Je sais qu'il y a des JAVA_OPTS à définir pour déboguer à distance un programme Java.
Que sont-ils et que signifient-ils ?
6 answers
J'ai cet article mis en signet sur la configuration avec Eclipse pour Java 5 et ci-dessous.
Fondamentalement exécuter avec:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
Pour Eclipse avec Java 5 et supérieur , exécutez-le avec:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044
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, 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
Options sur -Xrunjdwp
ou agentlib:jdwp
arguments sont :
-
transport=dt_socket
: signifie la manière utilisée pour se connecter à la JVM (socket est un bon choix, il peut être utilisé pour déboguer un ordinateur distant) -
address=8000
: Port TCP/IP exposé, à connectez-vous depuis le débogueur, -
suspend=y
: si 'y', dites à la JVM d'attendre que le débogueur soit attaché pour commencer l'exécution, sinon (si 'n'), démarre l'exécution immédiatement.
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 à distance, il faut exécuter le programme avec *:
dans l'adresse:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
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
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 simplement la commande mvnDebug
à la place de mvn
et attachez un débogueur sur le port 8000. Il vous prenez soin de tous les problèmes d'environnement.
Java
Java -Xdebug -Xrunjdwp:transport=dt_socket,serveur=y,address=8001,de suspendre=y -pot cible/cxf-boot-simple-0.0.1-INSTANTANÉ.jar
address
spécifie le port auquel il permettra de déboguer
Maven
Déboguer l'application Spring Boot avec Maven: mvn printemps-boot:run-Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,serveur=y,suspendre=y,address=8001"