Que définir les options de ligne de commande Java pour permettre à JVM d’être débogué à distance?

Je sais qu’il existe des JAVA_OPTS pour déboguer à distance un programme Java.

Qu’est-ce qu’ils sont et que veulent-ils dire?

J’ai cet article mis en signet sur la configuration avec Eclipse pour Java 5 et ci-dessous.

Fondamentalement l’ 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, ce qui sera plus lent.

A 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 -Xrunjdwp ou agentlib:jdwp sont les suivantes:

  • transport=dt_socket : désigne la manière de se connecter à JVM (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’, dites à la JVM d’attendre que le débogueur soit connecté pour commencer l’exécution, sinon (si ‘n’), lance 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 l’adresse *: 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  

Pour java 1.4:

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

Pour java 1.3:

 java -Xnoagent -Djava.comstackr=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005  

Voici un résultat 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 joignez un débogueur sur le port 8000. Vous prenez en charge tous les problèmes d’environnement.

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 auquel il permettra de déboguer

Maven

Déboguer l’application Spring Boot avec Maven: mvn spring-boot: exécuter -Drun.jvmArguments = “-Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspendre = y, adresse = 8001”