Débogage à distance Tomcat avec Eclipse

95

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

puis je lance bin/catalina.sh, où je vois la sortie en disant qu'il est à l' écoute pour dt_socketle port 8000. Mais chaque fois que j'essaie de me connecter au port 8000dans 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?

Victor
la source
pouvez-vous s'il vous plaît poster votre configuration à distance utilisée dans eclipse.
Sean

Réponses:

133

Pouvez-vous vérifier si cela fonctionne?

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

catalina.sh jpda start
Raghuram
la source
4
En fait, le vôtre l'a résolu. Eclipse ne dit rien quand il se connecte avec succès, et la reconnexion une deuxième fois force l'erreur. Cela fonctionnait donc, mais je n'ai tout simplement pas remarqué.
victor
18
Ceci est pour ceux sous Windows OS:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam
1
Que fait l'option suspend = n?
Trismegistos
2
@Trismegistos. suspendspécifie si le jvm doit attendre le débogueur ou continuer. Voir ce doc .
Raghuram
9
En fait, cela catalina.sh jpda startdevrait suffire. Le catalina.sh a quelques JPDA_*paramètres qui peuvent être utilisés par exemple pour changer de port, voir le fichier pour la documentation.
zpon
53

J'ai passé du temps là-dessus pour obtenir les bonnes informations.

Voici donc les informations détaillées étape par étape.

Environnement: Windows 7

Version TomCat: 7.0

IDE: Eclipse

Les configurations à ajouter pour activer le débogage à distance avec in tomcat sont

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

Je ne recommande pas la configuration ci-dessus pour un environnement non Windows. Pour ajouter la configuration ci-dessus, double-cliquez sur le serveur tomcat qui sera disponible en vue serveur. Trouvez la capture d'écran ci-dessous. entrez la description de l'image ici

Ajoutez maintenant la configuration d'environnement d'exécution ci-dessus à tomcat. Pour cette capture d'écran ci-dessous.

entrez la description de l'image ici

Maintenant, allez à l'onglet Arugments dans Modifier les propriétés de configuration de lancement, comme indiqué dans la capture d'écran ci-dessous.

entrez la description de l'image ici

La section des arguments GoTo VM ajoute ces lignes.

-Xdebug

-agentlib: jdwp = transport = dt_socket, adresse = 8000, serveur = y, suspendre = n

entrez la description de l'image ici

Maintenant, le bouton de débogage est disponible sur la barre d'outils Eclipse.

entrez la description de l'image ici

Dans les configurations de débogage, recherchez «Application Java distante» et double-cliquez dessus.entrez la description de l'image ici

Dans le champ Nom, saisissez le nom que vous souhaitez.

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 donc c'est "localhost".

Enfin, la colonne Port, la valeur doit être 8000. En dehors des champs de texte Nom et Projet, les deux autres colonnes Host et port seront remplies par éclipse lui-même sinon vous donner les mêmes valeurs que celles mentionnées. Vérifiez la capture d'écran pour plus d'informations.entrez la description de l'image ici

Maintenant, faites un clic droit sur TomcatServer dans la console du serveur, sélectionnez Ajouter et supprimer dans le menu contextuel. À partir de cette boîte de dialogue, vous pouvez ajouter le projet au serveur.

Exécutez maintenant le serveur Tomcat.

entrez la description de l'image ici

Exécutez maintenant TomCatDebugConfiguration à partir de l'outil de débogage.

Dernier navigateur interne ou externe ouvert et exécutez votre projet. Si le contrôle d'exécution a atteint les points d'arrêt, l'éclipse demandera une perspective de débogage.

Ravi MCA
la source
47

Dans le répertoire bin de tomcat où se trouve catalina.batou .sh(aka {CATALINA_BASE} / bin), éditez (créez sinon):

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 catalina.bat(ou .sh) fichier.

Voir les commentaires dans catalina.batou catalina.sh.

Vous devrez peut-être ajuster la syntaxe pour votre environnement / situation particulière. 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.

Karl
la source
Cela fonctionne, vous devrez définir ce CATALINA_OPTS dans setenv.sh qui se trouve dans le répertoire tomcat / bin. Merci.
Amit Kumar
1
Dans mon setenv.bat c'était JAVA_OPTS (tomcat 7)
vikingsteve
Bonjour Philip, a ajouté quelques notes qui pourraient aider, sinon: quelles versions d'os, de tomcat et d'éclipse utilisez-vous?
karl
dans setenv.bat le binrépertoire, mettez une ligne comme set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, utilisez startup.batpour démarrer tomcat
Paramvir Singh Karwal
33

Dans le catalina.batfichier, 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: Ensuite, dans l'éclipse, créez une configuration de débogage

    1. Donnez n'importe quel nom pour la configuration.
    2. Donnez le project name.
    3. Donnez le type de connexion comme Standard(Socket Attach)
    4. hôte en tant que localhost
    5. port comme 8000(ou n'importe quel numéro de port, mais cela devrait être le même dans d'autres endroits également).
RAJ
la source
J'ai trouvé CATALINA_OPTS dans les parties suivantes sur catalina.bat,: doStop shift set ACTION = stop set CATALINA_OPTS = goto execCmd: doConfigTest shift set ACTION = configtest set CATALINA_OPTS = goto execCmd où le modifier? Pouvez-vous simplement télécharger le contenu de votre catalina.bat?
Gopakumar NG
On dirait que vous écrivez deux fois la même chose. J'ai sauté votre étape 1 - et cela fonctionne. Pouvez-vous confirmer qu'il n'est pas nécessaire de modifier CATALINA_OPTS?
Henry Aloni
pour les différences entre voir CATALINA_OPTS et JPDA_OPTS voir: stackoverflow.com/questions/11222365/...
Mike R
1
Cela ne fonctionnera pas dans Tomcat 8. Pour que cela fonctionne dans Tomcat 8, vous devez omettre l'étape 1.
Dave
@RAJ. Cela a fonctionné totalement dans Tomcat 6. Merci beaucoup.
T8Z
7

La plupart des réponses ci-dessus sont correctes, mais rappelez-vous que par défaut, le débogueur écoutera uniquement sur l'hôte local. Si vous déboguez un serveur distant, vous devrez spécifier l'adresse IP sur laquelle écouter, par exemple

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, adresse = 10.1.1.33 : 8000, serveur = y, suspend = n"

catalina.sh jpda start

Notez que l'adresse est maintenant 10.1.1.33 : 8000

Bien sûr, vous pouvez également vérifier quelle IP est réellement utilisée, en exécutant

netstat -an

sur Windows et Linux et filtrez le port avec find(Windows) ou grep(Linux).

touche
la source
Je pense que vous voulez dire quel PORT est réellement utilisé et non quelle IP .
Abdollah
1
Non, je veux dire "adresse IP". Si vous effectuez un débogage à distance (à partir d'une autre machine), vous devez être en mesure de spécifier une adresse IP différente de localhost ou 127.0.0.1. Bien sûr, vous aurez toujours besoin du numéro de port.
DAB le
5

Exécutez simplement ./catalina.sh jpda start(fourches) ou ./catalina.sh jpda run(ne fourche pas, non mentionné dans l'aide). Toutes les options mentionnées ici ont par défaut des valeurs saines.

atamanroman
la source
5

Permettez-moi de partager la manière simple d'activer le mode de débogage à distance 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 (cela devrait commencer la ligne 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: puis exécutez simplement bin> startup.bat (donc maintenant votre serveur tomcat fonctionnait en mode distant avec le port 8000).

étape 5: après cela permet de connecter votre projet source par eclipse IDE avec un client distant.

Étape 6: Dans l'IDE Eclipse, allez dans "Configuration de débogage"

étape 7: cliquez sur "application java distante" et sur ce, cliquez sur "Nouveau"

step8. dans l'onglet "connexion" définir la valeur du paramètre

   project= your source project  
   connection Type: standard (socket attached)   
   host: localhost  
   port:8000  

étape 9: cliquez sur appliquer et déboguer.

donc finalement 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..

Mayen
la source
4

Modifiez 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: ajoutez la ligne ci-dessous pour exécuter le mode de débogage par défaut lorsque vous exécutez startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse ou STS sélectionnez 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
shermi
la source
Ces informations sont pour WINDOWS, mais il se trouve que j'étais sur Windows et cela m'a donc aidé. Merci!
Anneau le
2

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"
shachar
la source
2

Dans tomcat 7, catalina.sh a ce code:

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

Marcelo Salazar
la source
Tomcat 8: Les variables JPDA_ peuvent être définies dans setenv.sh sans avoir besoin de les «exporter». Dans tous les cas, le premier paramètre de l'appel de démarrage doit être 'jpda'. Si vous démarrez tomcat en tant que service, le mieux est de modifier le script $ {CATALINA_HOME} /bin/startup.sh, ajoutez le paramètre 'jpda' dans la dernière ligne avant 'start': ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
Heri
1

Je rencontrais ce problème lors de l'exécution de Tomcat à l'intérieur d'un conteneur Docker. Pour résoudre ce problème, assurez-vous d'ajouter l'argument «-p 8000: 8000» dans votre commande d'exécution du docker pour exposer ce port à votre machine locale. Vous aurez bien sûr besoin du fichier setenv.sh dans votre $ {CATALINA_HOME} / bin / dans votre conteneur également.

Cheen
la source
0

Modifier le fichier startup.bat avec CATALINA_OPTS ET JPDA_OPTS n'a pas fonctionné pour moi, mais les ajouter à catalina.bat a fonctionné

  1. Modifier catalina.bat

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"

  1. Modifiez startup.bat pour inclure jpda

changer l'appel "% EXECUTABLE%" start% CMD_LINE_ARGS% en

appeler "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Configurez ensuite l'application Java distante dans vos configurations de débogage dans Eclipse.

David Stableforth
la source
0

Tout d'abord, si vous ouvrez catalina.bat avec l'éditeur de texte, vous voyez que: "Ne définissez pas les variables dans ce script ....." Donc, ne le changez jamais dans ce script, à la place vous pouvez suivre les étapes ci-dessous:

  1. Il vous conseille de créer un nouveau fichier chauve-souris avec le nom "setenv.bat".
  2. Ensuite, définissez 2 variables dans ce fichier bat telles que:

    set CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, adresse = 8000, serveur = y, suspend = n"

    set JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, adresse = 8000, serveur = y, suspend = n"

  3. Enfin exécutez cela à cmd que: "catalina.bat jpda start"

  4. Dans l'IDE, créez une configuration de débogage à distance et définissez l'hôte sur l'IP et le port du serveur associé sur 8000.

Mustafa Kemal
la source
0

Pour la version apache-tomcat-8.5.28, faites ceci,

catalina.bat jpda start

Comme les paramètres par défaut déjà configurés pour nous dans catalina.bat comme

sinon "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, adresse =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Donc pas besoin d'autre config. Et lorsque vous exécutez la commande catalina.bat jpda start, vous pouvez voir que le port de débogage 8000 est ouvert.

Lyju I Edwinson
la source
-2

Pour apache-tomcat-8.5.28

modifier JDPA_OPTScomme ci-dessous puis exécuter commecatalina.bat jpda start

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
Madhu K
la source