Come eseguire il debug di un’applicazione Spring Boot con Eclipse?

La mia app web di Spring Boot sta funzionando bene, e mi piacerebbe eseguirne il debugging tramite Eclipse.

Quindi quando lancio il debugger Remote Java Application, quale porta dovrei ascoltare? E c’è un’impostazione sulla mia webapp che devo impostare per abilitare il debug?

Perché non fai clic destro sul metodo main() e scegli "Debug As... Java Application" ?

C’è la sezione 19.2 in Spring Boot Reference che ti dice sull’avvio dell’applicazione con il supporto per il debug remoto abilitato.

 $ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \ -jar target/myproject-0.0.1-SNAPSHOT.jar 

Dopo aver avviato l’applicazione, aggiungi la configurazione dell’applicazione Java remota nelle configurazioni Esegui / Debug, seleziona la porta / indirizzo che hai definito quando avvii la tua app e sei libero di eseguire il debug.

Non ho avuto bisogno di impostare il debug remoto per poter funzionare, ho usato Maven.

  1. Assicurati di aver installato il plugin Maven in Eclipse.
  2. Fai clic su Esegui> Esegui configurazioni> Creazione Maven> nuova configurazione di avvio :
    • Directory di base: vai alla radice del tuo progetto
    • Obiettivi: spring-boot::run .
  3. Fai clic su Applica quindi su Esegui .

NB. Se il tuo IDE ha problemi nel trovare il codice sorgente del tuo progetto quando esegui il debug line-by-line, dai un’occhiata a questa risposta SO per scoprire come albind manualmente il codice sorgente all’applicazione di debug.

Spero che questo aiuti qualcuno!

Soluzione più semplice:

Invece di digitare mvn spring-boot:run , digita semplicemente mvnDebug spring-boot:run

Sarà comunque necessario colbind il debugger in Eclipse creando una nuova configurazione di debug per una “Remote Java Application” sulla porta pertinente.

Esegui sotto il comando dove è collocato pom.xml :

 mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005" 

E avvia la tua applicazione java remota con l’opzione di debug sulla porta 5005

Come eseguire il debug di un’applicazione di avvio Spring di produzione remota o di produzione temporanea

Lato server

Supponiamo che tu abbia seguito con successo la guida di Spring Boot sulla configurazione della tua applicazione Spring Boot come servizio . Il tuo artefatto dell’applicazione risiede in /srv/my-app/my-app.war , accompagnato da un file di configurazione /srv/my-app/my-app.conf :

 # This is file my-app.conf # What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script # (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script # gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that # we can also do in a regular shell script. JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n" export SPRING_PROFILES_ACTIVE=staging 

Quando si riavvia l’applicazione Spring Boot con il sudo service my-app restart , quindi nel suo file di registro situato in /var/log/my-app.log dovrebbe essere una riga che dice Listening for transport dt_socket at address: 8002 .

Lato client (macchina dello sviluppatore)

Aprire un tunnel di inoltro della porta SSH al server: ssh -L 8002:localhost:8002 [email protected] . Mantenere questa sessione SSH in esecuzione.

In Eclipse, dalla barra degli strumenti, selezionare Esegui -> Debug Configurations -> selezionare Remote Java Application -> fare clic sul pulsante Nuovo -> selezionare come tipo di connessione standard (Socket Attach) , come host localhost e come Port 8002 (o qualsiasi altra cosa si abbia configurato nei passaggi precedenti). Fare clic su Applica e quindi su Debug .

Il debugger Eclipse dovrebbe ora connettersi al server remoto. Passare alla prospettiva Debug dovrebbe mostrare la JVM connessa e i suoi thread. I breakpoint dovrebbero essere triggersti ​​non appena vengono triggersti ​​da remoto.

La soluzione migliore a mio parere è aggiungere un plugin nel pom.xml e non è necessario fare altro per tutto il tempo:

    org.springframework.boot spring-boot-maven-plugin   -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898      repackage     

Si prega di consultare http://java.dzone.com/articles/how-debug-remote-java-applicat per abilitare il debug remoto. Se si utilizza tomcat per eseguire l’applicazione, avviare tomcat con i parametri di debug remoto oppure avviare tomcat con il supporto JPDA utilizzando il seguente comando.

windows

 /startup.bat jpda 

* nix

 /startup.sh jpda 

questo abiliterà il debug remoto sulla porta 8000

Con eclipse o qualsiasi altro IDE, è sufficiente fare clic con il pulsante destro del mouse sull’applicazione di avvio principale e fare clic su “debug come applicazione java”

Questa domanda ha già una risposta, ma ho anche avuto lo stesso problema per eseguire il debug di Springboot + gradle + jHipster,

La maggior parte delle applicazioni di avvio di Spring possono eseguire il debug con il tasto destro del mouse e il debug, ma quando si utilizza gradle, con alcune impostazioni aggiuntive dei parametri dell’ambiente, non è ansible eseguire il debug direttamente.

Per risolvere questo problema, Eclipse ha fornito una funzionalità aggiuntiva come Remote Java Application

utilizzando queste funzionalità è ansible eseguire il debug dell’applicazione.

Segui il seguente passaggio:

esegui la tua applicazione gradle con il ./gradlew bootRun --debug-jvm

Ora vai su eclipse -> fai clic con il tasto destro del mouse su progetto e configurazione debug -> Applicazione Java remota.

aggiungi host e porta come host locale e porta come 5005 (predefinito per il debug gradle, puoi cambiarlo)

Fare riferimento per maggiori dettagli e passo.