Quali sono le opzioni della riga di comando Java da impostare per consentire a JVM di essere sottoposto a debug in remoto?

So che ci sono alcuni JAVA_OPTS da impostare per il debug remoto di un programma Java.

Cosa sono e cosa significano?

Ho aggiunto questo articolo a questo articolo con Eclipse per Java 5 e versioni successive.

Fondamentalmente eseguirlo con :

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

Per Eclipse con Java 5 e versioni successive , eseguilo con:

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

Prima di Java 5.0, utilizzare -Xrunjdwp argomenti -Xdebug e -Xrunjdwp . Queste opzioni continueranno a funzionare nelle versioni successive, ma verranno eseguite in modalità interpretata anziché in JIT, che sarà più lenta.

Da Java 5.0, è meglio usare l’ -agentlib:jdwp single:

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

Opzioni su -Xrunjdwp o agentlib:jdwp argomenti agentlib:jdwp sono:

  • transport=dt_socket : indica la modalità di connessione a JVM (il socket è una buona scelta, può essere usato per eseguire il debug di un computer remoto)
  • address=8000 : porta TCP / IP esposta, per connettersi dal debugger,
  • suspend=y : se ‘y’, dire alla JVM di aspettare che il debugger sia collegato per iniziare l’esecuzione, altrimenti (se ‘n’), avvia immediatamente l’esecuzione.

Poiché Java 9.0 JDWP supporta solo le connessioni locali per impostazione predefinita. http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435

Per il debug remoto si dovrebbe eseguire il programma con *: in address:

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

Per Java 1.5 o versioni successive:

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

Per Java 1.4:

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

Per java 1.3:

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

Qui viene prodotto da un semplice programma:

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

Ci sono molti problemi ambientali se usi Maven. Quindi, se si avvia il programma da Maven, basta eseguire il comando mvnDebug al posto di mvn e colbind un debugger sulla porta 8000. Si prende cura di tutti i problemi dell’ambiente.

Giava

java -Xdebug -Xrunjdwp: transport = dt_socket, server = y, indirizzo = 8001, suspend = y -jar target / cxf-boot-simple-0.0.1-SNAPSHOT.jar

address specifica la porta a cui consentirà di eseguire il debug

Maven

Debug Spring Boot app con Maven: mvn spring-boot: run -Drun.jvmArguments = “-Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = y, indirizzo = 8001”