Je n'arrive pas à déboguer l'application Tomcat via Eclipse. J'ai mis
CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
et puis je lance bin/catalina.sh
, où je vois la sortie disant qu'il écoute dt_socket
sur port 8000
. Mais chaque fois que j'essaie de me connecter au port 8000
dans Eclipse (en ajoutant une entrée dans le menu de l'application Java distante), il se plaint d'une connexion refusée. Des idées?
Pouvez-vous vérifier si cela fonctionne?
JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
catalina.sh jpda start
J'ai passé du temps dessus pour obtenir la bonne information.
Alors voici les informations détaillées étape par étape.
Environnement: Windows 7
Tomcat version: 7.0
IDE: Eclipse
Les configurations à ajouter pour permettre le débogage distant avec Tomcat sont
-Xdebug
-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Je ne recommande pas la configuration ci-dessus de l'environnement non Windows . Pour ajouter la configuration ci-dessus, double-cliquez sur le serveur Tomcat qui sera disponible dans la vue du serveur. Trouvez la capture d'écran ci-dessous .
Ajoutez maintenant la configuration de l’environnement d’exécution ci-dessus à Tomcat. Pour cette vérification ci-dessous capture d'écran.
Allez maintenant à l'onglet Arugments dans Editer les propriétés de configuration de lancement, comme indiqué dans la capture d'écran ci-dessous.
La section des arguments GoTo VM ajoute ces lignes.
-Xdebug
-agentlib: jdwp = transport = dt_socket, adresse = 8000, serveur = y, suspendre = n
Il faut maintenant que le bouton de débogage soit disponible dans la barre d’outils Eclipse.
Dans les configurations de débogage, recherchez "Application Java à distance" et double-cliquez dessus.
Dans le champ Nom, entrez le nom de votre choix.
Dans le champ de projet à l’aide du bouton Parcourir, sélectionnez le projet pour lequel vous souhaitez effectuer un débogage à distance.
Le nom d'hôte n'est rien d'autre que l'adresse de l'hôte. Ici, je travaille localement, c’est donc "localhost".
Enfin, la valeur de la colonne Port devrait être 8000. Outre les champs de texte Nom et Projet, les deux autres colonnes Hôte et port seront renseignés par Eclipse lui-même si vous ne disposez pas des mêmes valeurs que celles indiquées Vérifiez la capture d'écran pour plus d'informations.
Cliquez maintenant avec le bouton droit de la souris sur TomcatServer dans la console du serveur, puis sélectionnez Ajouter et Supprimer du menu contextuel. Dans cette boîte de dialogue, vous pouvez ajouter le projet au serveur.
Maintenant, lancez le serveur Tomcat.
Maintenant, lancez TomCatDebugConfiguration à partir de l’outil de débogage.
Dernier navigateur interne ou externe ouvert et lancez votre projet. Si le contrôle d'exécution atteint les points d'arrêt, Eclipse demandera une perspective de débogage.
Dans le répertoire bin Tomcat où lecatalina.bat
ou le .sh
est trouvé (alias {CATALINA_BASE}/bin), éditez (créez s'il n'y en a pas):
setenv.bat/.sh
Ajoutez la ligne suivante:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
C'est tout ce que vous devez faire, vous n'avez pas besoin de modifier le fichier catalina.bat
(ou .sh
).
Voir les commentaires dans catalina.bat
ou catalina.sh
.
Vous devrez peut-être ajuster la syntaxe pour votre environnement/situation particulier. Par exemple, si vous avez déjà défini CATALINA_OPTS, vous pouvez faire quelque chose comme ceci (dans un environnement Windows):
set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n
Pour déboguer depuis Eclipse:
run-> Configurations de débogage ...-> Application Java distante-> Nouveau
et spécifiez un nom, le projet que vous déboguez et l'hôte Tomcat et le port de débogage spécifiés ci-dessus.
Dans le fichier catalina.bat
, veuillez modifier ce qui suit.
Étape 1: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
Étape 2: JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
Étape 3: Exécutez Tomcat à partir de l'invite de commande comme ci-dessous: catalina.sh jpda start
Étape 4: Créez ensuite une configuration de débogage dans Eclipse
project name
.Standard(Socket Attach)
localhost
8000
(ou tout autre numéro de port, mais il devrait également être identique ailleurs).Permettez-moi de partager le moyen simple d'activer le mode de débogage distant dans Tomcat7 avec Eclipse (Windows).
Étape 1: ouvrez le fichier bin/startup.bat
Étape 2: ajoutez les lignes ci-dessous pour le débogage avec l’option JDPA (ligne de départ du fichier)
set JPDA_ADDRESS=8000
set JPDA_TRANSPORT=dt_socket
Étape 3: dans le même fichier .. aller à la fin du fichier modifier cette ligne -
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
instead of line
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
étape 4: exécutez simplement bin> startup.bat (Votre serveur Tomcat s’exécute maintenant en mode distant avec le port 8000).
étape 5: après cela, connectez votre projet source par Eclipse IDE avec le client distant.
step6: Dans Eclipse IDE, accédez à "Configuration de débogage"
step7: cliquez sur "application Java distante" puis sur "Nouveau"
step8. dans l'onglet "Connect", définissez la valeur du paramètre
project= your source project
connection Type: standard (socket attached)
Host: localhost
port:8000
step9: cliquez sur appliquer et déboguer.
enfin, votre client distant Eclipse est connecté au serveur Tomcat en cours d’exécution (mode débogage).
J'espère que cette approche pourrait vous aider.
Cordialement..
Modifier catalina.bat pour ajouter
set JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
et
CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
Facultatif: Ajouter sous la ligne pour exécuter le mode débogage par défaut lorsque vous exécutez startup.bat
call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%
Eclipse ou STS sélectionne la configuration de débogage clic droit -> nouveau
connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address
Il suffit d'exécuter ./catalina.sh jpda start
(forks) ou ./catalina.sh jpda run
(ne se divise pas en fourchette, cela n'est pas mentionné dans l'aide). Toutes les options mentionnées ici sont définies par défaut.
Si tout ce qui précède ne fonctionne toujours pas, vous pouvez toujours ajouter au script
set "Java_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
Dans Tomcat 7, catalina.sh a le code suivant:
if [ "$1" = "jpda" ] ; then
if [ -z "$JPDA_TRANSPORT" ]; then
JPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; then
JPDA_ADDRESS="8000"
fi
if [ -z "$JPDA_SUSPEND" ]; then
JPDA_SUSPEND="n"
fi
if [ -z "$JPDA_OPTS" ]; then
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
fi
CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
shift
fi
Ii implique que vous pouvez configurer JPDA avec:
export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n
Ou avec:
JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
Et enfin utiliser:
catalina.sh jpda start
Cordialement
Je rencontrais ce problème en exécutant Tomcat dans un conteneur Docker. Pour résoudre ce problème, veillez à ajouter l'argument '-p 8000: 8000' dans votre commande d'exécution du menu fixe pour exposer ce port à votre ordinateur local. Vous aurez bien sûr besoin du fichier setenv.sh dans votre $ {CATALINA_HOME}/bin/de votre conteneur.
Tout d’abord, si vous ouvrez catalina.bat avec un éditeur de texte, vous verrez ce qui suit: "Ne définissez pas les variables dans ce script .....". Ne le modifiez donc jamais dans ce script, vous pouvez plutôt effectuer les étapes suivantes :
Ensuite, définissez 2 variables dans ce fichier bat, telles que:
set CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, adresse = 8000, serveur = y, suspendre = n"
set JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, adresse = 8000, serveur = y, suspendre = n"
Enfin, exécutez cela à cmd que: "catalina.bat jpda start"
Dans IDE, créez une configuration de débogage à distance et définissez Host sur l'IP du serveur associé et le port sur 8000.
La plupart des réponses ci-dessus sont correctes, mais rappelez-vous que par défaut, le débogueur n'écoutera que sur localhost. Si vous déboguez un serveur distant vous devrez spécifier l'adresse IP sur laquelle vous souhaitez écouter, par exemple
JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, adresse = 10.1.1.33 : 8000, serveur = y, susp = n"
catalina.sh jpda début
Notez que l'adresse est maintenant 10.1.1.33 : 8000
Bien sûr, vous pouvez également vérifier quelle adresse IP est réellement utilisée, en exécutant
netstat -an
sur Windows et Linux et filtrer le port avec find (Win) ou grep (Linux).
La modification du fichier startup.bat avec CATALINA_OPTS ET JPDA_OPTS ne fonctionnait pas pour moi, mais leur ajout à catalina.bat ne fonctionnait pas.
CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, adresse = 8000, serveur = y, suspendre = n"
JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, adresse = 8000, serveur = y, suspendre = n"
modifier l'appel "% EXECUTABLE%" démarrer% CMD_LINE_ARGS% en
appelez "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%
Configurez ensuite une application Java distante dans vos configurations de débogage dans Eclipse.
Pour la version Apache-Tomcat-8.5.28, faites simplement ceci,
catalina.bat jpda start
En tant que paramètres par défaut déjà configurés pour nous dans catalina.bat en tant que
sinon "% JPDA_OPTS%" == "" obtenu pour gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, adresse =% JPDA_ADDRESS%, serveur = y, suspendre =% JPDA_SUSPEND%
Donc, pas besoin d'une autre configuration. Et lorsque vous exécutez la commande catalina.bat jpda start, vous pouvez voir que le port de débogage 8000 est ouvert.
Voir cette réponse pour les problèmes que j'ai rencontrés avec Java 8 et Tomcat 9: Le débogage à distance Java (JPDA) ne fonctionne pas pour moi dans Tomcat 9
Ceci est similaire à l'avertissement de @ DAB et sa solution est probablement plus sûre.