Comment déboguer l'application Spring Boot avec Eclipse?

100

Ma Spring Bootwebapp fonctionne très bien et j'aimerais la déboguer via Eclipse.

Donc, lors du lancement de mon débogueur Remote Java Application, quel port dois-je écouter? Et y a-t-il un paramètre sur mon application Web que je dois définir pour activer le débogage?

JeffLL
la source
Dans STS 3.9.4.RELEASE sur Linux Mint 18 Sarah, je dois entrer dans la perspective de débogage pour déboguer les applications Spring Boot.
TimeTrap

Réponses:

167

Pourquoi ne faites-vous pas un clic droit sur la main()méthode et choisissez "Debug As... Java Application"?

Dave Syer
la source
J'avais pas pensé à ça. Je teste une application de repos. Lancez-le, puis appuyez dessus avec mon navigateur avec différentes configurations.
JeffLL
8
Il y a des moments où l'on peut avoir besoin de déboguer l'application exécutée à distance sur un serveur, où cela ne s'applique pas.
Cuga
Cela n'a pas fonctionné pour moi. "L'éditeur ne contient pas de type principal"
Raj
Je suppose que vous n'avez pas "fait un clic droit sur la méthode main ()" alors?
Dave Syer
4
Ma situation était différente, mais Running Main ne prenait pas directement quelques fichiers de configuration de printemps, c'est-à-dire bootstrap.xml, alors j'ai dû passer à l'exécuter en tant que maven spring-boot: run. Mais le problème avec cela est que même si vous exécutez ce maven goal depuis eclipse, il ne le déboguera pas.
sanjay patel
91

Il y a la section 19.2 dans Spring Boot Reference qui vous explique comment démarrer votre application avec la prise en charge du débogage à distance activée.

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

Après avoir démarré votre application, ajoutez simplement cette configuration de l'application Java distante dans les configurations Exécuter / Déboguer, sélectionnez le port / l'adresse que vous avez défini lors du démarrage de votre application, puis vous êtes libre de déboguer.

masster
la source
Cela a fonctionné pour moi. Merci! Eclipse n'a pas pu déboguer mon projet de démarrage de printemps (il s'est plaint que la classe Main n'a pas pu être trouvée).
user6123723
4
Notez qu'avec Java 8 (je ne connais pas les autres versions), les java -agentlib:jdwp=helpétats en cours d'exécution "L'ancienne interface -Xrunjdwp peut toujours être utilisée, mais sera supprimée dans une prochaine version". Utilisez plutôt-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul
23

Solution plus simple:

Au lieu de taper mvn spring-boot:run, tapez simplementmvnDebug spring-boot:run

Vous devrez toujours attacher le débogueur dans Eclipse en créant une nouvelle configuration de débogage pour une «application Java distante» sur le port concerné.

Duran Wesley Harris
la source
3
Comment spécifieriez-vous alors un numéro de port autre que celui par défaut?
Stephane
19

Je n'avais pas besoin de configurer le débogage à distance pour que cela fonctionne, j'ai utilisé Maven.

  1. Assurez-vous que le plugin Maven est installé dans Eclipse.
  2. Cliquez sur Exécuter> Exécuter les configurations> Maven Build> nouvelle configuration de lancement :
    • Répertoire de base: accédez à la racine de votre projet
    • Objectifs: spring-boot::run.
  3. Cliquez sur Appliquer puis sur Exécuter .

NB. Si votre IDE a des problèmes pour trouver le code source de votre projet lors du débogage ligne par ligne, jetez un œil à cette réponse SO pour savoir comment attacher manuellement votre code source à l'application de débogage.

J'espère que cela aide quelqu'un!

Dawngerpony
la source
Si vous exécutez le serveur avec spring-boot: run, vous ne pourrez pas l'arrêter en appuyant simplement sur l'icône rouge dans la fenêtre de la console.
Shailesh Pratapwar
Je peux l'arrêter comme ça (peut-être nécessiter l'installation de netstat, j'oublie si j'ai dled un binaire ou est venu avec Cygwin, ou une partie de Windows maintenant): netstat -ano | grep "9999" - renvoie l'ID de tâche 36308 dans Windows taskkill / F / PID 36308
armyofda12mnkeys
19

Comment déboguer une application Spring Boot de production ou de préparation à distance

Du côté serveur

Supposons que vous ayez suivi avec succès le guide de Spring Boot sur la configuration de votre application Spring Boot en tant que service . Votre artefact d'application réside dans /srv/my-app/my-app.war, accompagné d'un fichier de configuration /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

Lorsque vous redémarrez votre application Spring Boot avec sudo service my-app restart, puis dans son fichier journal situé à /var/log/my-app.logdevrait être une ligne disant Listening for transport dt_socket at address: 8002.

Côté client (machine de développement)

Ouvrez un tunnel de redirection de port SSH sur le serveur: ssh -L 8002:localhost:8002 [email protected]. Gardez cette session SSH en cours d'exécution.

Dans Eclipse, dans la barre d'outils, sélectionnez Exécuter -> Configurations de débogage -> sélectionnez Application Java distante -> cliquez sur le bouton Nouveau -> sélectionnez comme type de connexion standard (Socket Attach) , comme hôte local hôte et comme port 8002 (ou tout ce que vous avez configuré dans les étapes précédentes). Cliquez sur Appliquer puis sur Déboguer .

Le débogueur Eclipse doit maintenant se connecter au serveur distant. Le passage à la perspective Débogage doit afficher la JVM connectée et ses threads. Les points d'arrêt doivent se déclencher dès qu'ils sont déclenchés à distance.

Abdull
la source
La redirection de port et le tunneling étaient les éléments qui me manquaient. Ta. Crucial si vous déboguez sur un serveur basé sur Internet, par exemple sur Amazon.
PaulNUK
14

Exécutez la commande ci-dessous où pom.xmlest placé:

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

Et démarrez votre application Java distante avec l'option de débogage sur le port5005

Arpit Aggarwal
la source
2
Cela n'attend pas qu'un débogueur se connecte Spring Boot 2.0.3.RELEASE.
Stephane
10

La meilleure solution à mon avis est d'ajouter un plugin dans le pom.xml, et vous n'avez rien d'autre à faire tout le temps:

<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>
krmanish007
la source
Mais alors la commande mvn clean installdéclenche le débogueur et la construction se bloque. Ce serait cool si seule la mvnDebug clean installcommande le faisait.
Stephane
1
@Stephane, cette configuration devrait probablement être dans un profil spécifique facile à activer
davidxxx
4
  • faites un clic droit sur votre projet et choisissez "Debug As => Application Java ou Spring Boot App" -capture1 - entrez la description de l'image ici
  • Si vous voulez que votre application s'arrête quelque part dans votre application, double-cliquez sur la gauche, vous aurez comme cette capture 2. entrez la description de l'image ici
  • puis lorsque vous démarrez votre application, utilisez ces flèches pour aller ensuite. (capture 3) entrez la description de l'image ici
Abdelwahid Oubaalla
la source
C'est une bonne réponse à la question du titre. Cependant, la description a une question plus précise et différente, qui nécessite une réponse différente.
Thor Hovden
J'utilisais donc MyEclispe et l'option Debug As -> Spring Boot App était disponible et fonctionnait bien. Je n'utilise pas Eclipse Oxygen et l'élément de menu Spring Boot App n'est plus disponible. Dois-je installer un plugin pour eclipse pour obtenir cela?
Kachopsticks le
3

Right click on the spring boot project -> debug as -> spring boot App. Mettez un point de débogage et invoquez l'application à partir d'un client comme postman

Tadele Ayelegn
la source
2

Veuillez consulter http://java.dzone.com/articles/how-debug-remote-java-applicat pour activer le débogage à distance. Si vous utilisez tomcat pour exécuter votre application, démarrez tomcat avec les paramètres de débogage à distance ou vous pouvez démarrer tomcat avec le support JPDA en utilisant la commande suivante.

les fenêtres

<tomcat bin dir>/startup.bat jpda

*rien

<tomcat bin dir>/startup.sh jpda

cela permettra le débogage à distance sur le port 8000

Sangram Jadhav
la source
2

Avec eclipse ou tout autre IDE, cliquez avec le bouton droit de la souris sur votre application de démarrage de printemps principale et cliquez sur "déboguer en tant qu'application java"

Adia
la source
2

Cette question a déjà reçu une réponse, mais j'ai également eu le même problème pour déboguer Springboot + gradle + jHipster,

La plupart du temps, l'application de démarrage Spring peut déboguer par clic droit et déboguer, mais lorsque vous utilisez gradle, avec une configuration de paramètre d'environnement supplémentaire, il n'est pas possible de déboguer directement.

Pour résoudre ce problème, Eclipse a fourni une fonctionnalité supplémentaire en tant qu'application Java distante

en utilisant ces fonctionnalités, vous pouvez déboguer votre application.

Suivez l'étape ci-dessous:

exécutez votre application gradle avec la ./gradlew bootRun --debug-jvmcommande

Maintenant, allez dans eclipse -> projet de clic droit et configuration de débogage -> Application Java distante.

ajoutez votre hôte et portez comme hôte local et portez comme 5005 (par défaut pour le débogage gradle, vous pouvez le changer)

Reportez-vous pour plus de détails et pour l'étape.

bharatpatel
la source
0

Faites un clic droit sur le fichier de classe principale des applications Spring Boot -> sélectionnez les options Déboguer en tant que -> Sélectionnez l'application Java

entrez la description de l'image ici Vous pouvez maintenant utiliser des points d'arrêt pour déboguer l'application.

Bishal Jaiswal
la source