Come eseguire il debug dell'applicazione Spring Boot con Eclipse?


100

La mia Spring Bootwebapp funziona perfettamente e mi piacerebbe eseguirne il debug tramite Eclipse.

Quindi, quando avvio il mio debugger dell'applicazione Java remota, quale porta devo ascoltare? E c'è un'impostazione sulla mia webapp che devo impostare per abilitare il debug?


In STS 3.9.4.RELEASE su Linux Mint 18 Sarah devo entrare nella prospettiva di debug per eseguire il debug delle applicazioni Spring Boot.
TimeTrap

Risposte:


167

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


Non ci avevo pensato. Sto testando un'app per il riposo. Lanciarlo e poi colpirlo con il mio browser con diverse configurazioni.
JeffLL

8
In alcuni casi potrebbe essere necessario eseguire il debug dell'applicazione in esecuzione in remoto su un server, in cui ciò non sarebbe applicabile.
Cuga

Non ha funzionato per me. "L'editor non contiene un tipo principale"
Raj

Immagino che non hai "fatto clic con il pulsante destro del mouse sul metodo main ()" allora?
Dave Syer

4
La mia situazione era diversa, ma l'esecuzione diretta di Main non stava raccogliendo alcuni file di configurazione primaverili, ad esempio bootstrap.xml, quindi dovevo passare a eseguirlo come maven spring-boot: run. Ma il problema è che anche se stai eseguendo questo obiettivo esperto da eclipse, non lo eseguirà il debug.
sanjay patel

91

C'è la sezione 19.2 in Spring Boot Reference che spiega come avviare l'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, aggiungilo configurazione dell'applicazione Java remota nelle configurazioni Esegui / Debug, seleziona la porta / indirizzo che hai definito all'avvio dell'app, quindi sei libero di eseguire il debug.


Questo ha funzionato per me. Grazie! Eclipse non ha potuto eseguire il debug del mio progetto di avvio primaverile (ho continuato a lamentarmi del fatto che la classe Main non poteva essere trovata).
user6123723

4
Si noti che con Java 8 (non conosco altre versioni) in esecuzione si java -agentlib:jdwp=helpafferma "La vecchia interfaccia -Xrunjdwp può ancora essere utilizzata, ma verrà rimossa in una versione futura". Usa invece-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul

23

Soluzione più semplice:

Invece di digitare mvn spring-boot:run, digita semplicementemvnDebug spring-boot:run

Sarà comunque necessario collegare il debugger in Eclipse effettuando una nuova configurazione di debug per una "Applicazione Java remota" sulla porta pertinente.


3
Come si specifica quindi un numero di porta diverso da quello predefinito?
Stephane

19

Non avevo bisogno di impostare il debug remoto per farlo funzionare, ho usato Maven.

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

NB. Se il tuo IDE ha problemi a trovare il codice sorgente del tuo progetto durante il debug riga per riga, dai un'occhiata a questa risposta SO per scoprire come allegare manualmente il codice sorgente all'applicazione di debug.

Spero che questo aiuti qualcuno!


Se esegui il server con spring-boot: run, non sarai in grado di fermarlo semplicemente premendo l'icona rossa nella finestra della console.
Shailesh Pratapwar

Posso fermarlo in questo modo (potrebbe essere necessario che netstat sia installato, dimentico se ho eseguito il dled un binario o è venuto con Cygwin, o parte di Windows ora): netstat -ano | grep "9999" --returns 36308 compito id in Windows taskkill / F / PID 36308
armyofda12mnkeys

19

Come eseguire il debug di un'applicazione Spring Boot di produzione o di gestione temporanea remota

Lato server

Supponiamo che tu abbia seguito con successo la guida di Spring Boot sulla configurazione della tua applicazione Spring Boot come servizio . L'artefatto dell'applicazione risiede /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 riavvii l'applicazione Spring Boot con sudo service my-app restart, nel suo file di registro che si trova in /var/log/my-app.logdovrebbe esserci una riga che dice Listening for transport dt_socket at address: 8002.

Lato client (macchina dello sviluppatore)

Aprire un tunnel port-forwarding SSH al server: ssh -L 8002:localhost:8002 myusername@staging.example.com. Mantieni in esecuzione questa sessione SSH.

In Eclipse, dalla barra degli strumenti, seleziona Esegui -> Configurazioni di debug -> seleziona Applicazione Java remota -> fai clic sul pulsante Nuovo -> seleziona come Tipo di connessione standard ( Collegamento socket) , come Host localhost e come Porta 8002 (o qualsiasi altra cosa tu abbia configurato nei passaggi precedenti). Fare clic su Applica e quindi su Debug .

Il debugger di Eclipse dovrebbe ora connettersi al server remoto. Il passaggio alla prospettiva Debug dovrebbe mostrare la JVM connessa e i suoi thread. I punti di interruzione dovrebbero attivarsi non appena vengono attivati ​​in remoto.


Il port forwarding e il tunneling erano la parte che mi mancava. Ta. Fondamentale se esegui il debug su un server basato su Internet, ad esempio su Amazon.
PaulNUK

14

Esegui sotto il comando dove pom.xmlè posizionato:

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 porta5005


2
Ciò non riesce ad attendere il collegamento di un debugger Spring Boot 2.0.3.RELEASE.
Stephane

10

La soluzione migliore secondo me è aggiungere un plugin nel pom.xml, e non devi fare nient'altro tutto il tempo:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Ma poi il comando mvn clean installattiva il debugger e la build si blocca. Sarebbe bello se solo il mvnDebug clean installcomando lo facesse.
Stephane

1
@Stephane, questa configurazione dovrebbe probabilmente essere in un profilo specifico facile da abilitare
davidxxx

4
  • fai clic con il pulsante destro del mouse sul tuo progetto e scegli "Debug As => Java application o Spring Boot App" -capture1 - inserisci qui la descrizione dell'immagine
  • Se vuoi che la tua applicazione si metta in pausa da qualche parte nella tua app fai doppio clic a sinistra avrai come questa cattura 2. inserisci qui la descrizione dell'immagine
  • quindi quando avvii la tua app usa quelle frecce per andare avanti. (cattura 3) inserisci qui la descrizione dell'immagine

Questa è una buona risposta alla domanda del titolo. Tuttavia, la descrizione ha una domanda più specifica e diversa, che richiede una risposta diversa.
Thor Hovden

Quindi usavo MyEclispe e l'opzione Debug As -> Spring Boot App era disponibile e funzionava bene. Non utilizzo Eclipse Oxygen e la voce di menu dell'app Spring Boot non è più disponibile. Devo installare un plugin per eclipse per ottenerlo?
Kachopsticks

3

Right click on the spring boot project -> debug as -> spring boot App. Metti un punto debugger e invoca l'app da un client come Postman


2

Vedere http://java.dzone.com/articles/how-debug-remote-java-applicat per abilitare il debug remoto. Se stai usando Tomcat per eseguire la tua applicazione, avvia Tomcat con i parametri di debug remoto oppure puoi avviare Tomcat con il supporto JPDA usando il seguente comando.

finestre

<tomcat bin dir>/startup.bat jpda

* nix

<tomcat bin dir>/startup.sh jpda

questo abiliterà il debug remoto sulla porta 8000


2

Con eclipse o qualsiasi altro IDE, fai clic con il pulsante destro del mouse sulla tua principale applicazione Spring Boot e fai clic su "debug as java application"


2

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

Per lo più l'applicazione Spring boot può eseguire il debug facendo clic con il pulsante destro del mouse ed eseguire il debug, ma quando si utilizza gradle, avendo alcuni parametri di ambiente aggiuntivi, non è possibile eseguire il debug direttamente.

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

utilizzando queste funzionalità è possibile eseguire il debug dell'applicazione.

Segui il passaggio seguente:

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

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

aggiungi l'host e la porta come host locale e la porta come 5005 (impostazione predefinita per il debug gradle, puoi cambiarla)

Fare riferimento per maggiori dettagli e passaggi.


0

Fare clic con il tasto destro sul file di classe principale delle applicazioni Spring Boot -> selezionare le opzioni Debug As -> Seleziona applicazione Java

inserisci qui la descrizione dell'immagine Ora puoi usare i punti di interruzione per eseguire il debug dell'applicazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.