Depuración remota de Tomcat con Eclipse

95

Parece que no puedo depurar la aplicación tomcat a través de Eclipse. He puesto

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

y luego corro bin/catalina.sh, donde veo salida diciendo que es de escucha para dt_socketel port 8000. Pero cada vez que intento conectarme al puerto 8000en Eclipse (agregando una entrada en el menú de la aplicación java remota), se queja de una conexión rechazada. ¿Algunas ideas?

Víctor
fuente
¿Puede publicar su configuración remota utilizada en eclipse?
Sean

Respuestas:

133

¿Puedes comprobar si esto funciona?

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

catalina.sh jpda start
Raghuram
fuente
4
De hecho, el tuyo lo solucionó. Eclipse en realidad no dice nada cuando se conecta con éxito, y la reconexión por segunda vez fuerza el error. Así que estaba funcionando, pero no me di cuenta.
vencedor
18
Esto es para aquellos en el sistema operativo Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam
1
¿Qué hace la opción suspender = n?
Trismegistos
2
@Trismegistos. suspendespecifica si el jvm debe esperar al depurador o continuar. Consulte este documento .
Raghuram
9
En realidad catalina.sh jpda startdebería ser suficiente. Catalina.sh tiene un par de JPDA_*parámetros que se pueden utilizar para, por ejemplo, cambiar el puerto, consulte el archivo para obtener documentación.
zpon
53

Dediqué algo de tiempo a esto para obtener la información correcta.

Así que aquí está la información detallada paso a paso.

Entorno: Windows 7

Versión de TomCat: 7.0

IDE: Eclipse

Las configuraciones que se agregarán para habilitar la depuración remota en tomcat son

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

No recomiendo la configuración anterior para un entorno que no sea de Windows. Para agregar la configuración anterior, haga doble clic en el servidor Tomcat, que estará disponible en la vista del servidor. Encuentra la captura de pantalla a continuación. ingrese la descripción de la imagen aquí

Ahora agregue la configuración del entorno de tiempo de ejecución anterior a tomcat. Para ello, compruebe la siguiente captura de pantalla.

ingrese la descripción de la imagen aquí

Ahora vaya a la pestaña Arugments en Editar propiedades de configuración de inicio como se muestra en la siguiente captura de pantalla.

ingrese la descripción de la imagen aquí

La sección de argumentos de GoTo VM agrega estas líneas.

-Xdebug

-agentlib: jdwp = transporte = dt_socket, dirección = 8000, servidor = y, suspender = n

ingrese la descripción de la imagen aquí

Ahora tengo que depurar el botón disponible en la barra de herramientas de eclipse.

ingrese la descripción de la imagen aquí

En las configuraciones de depuración, busque "Aplicación Java remota" y haga doble clic en ella.ingrese la descripción de la imagen aquí

En el campo Nombre, ingrese el nombre que desee.

Desde el campo del proyecto usando el botón de navegación, seleccione el proyecto que desea realizar la depuración remota.

El nombre de host no es más que la dirección de host. Aquí estoy trabajando localmente, por lo que es "localhost".

Por último, en la columna Puerto, el valor debe ser 8000. Aparte de los campos de texto Nombre y Proyecto, otras dos columnas, Host y puerto, serán llenados por el propio eclipse si no hacen que tenga los mismos valores que los mencionados. Consulte Captura de pantalla para obtener información.ingrese la descripción de la imagen aquí

Ahora haga clic derecho en TomcatServer en la consola del servidor, seleccione Agregar y Eliminar del menú contextual. Desde este diálogo puede agregar el proyecto al servidor.

Ahora ejecute el servidor Tomcat.

ingrese la descripción de la imagen aquí

Ahora ejecute TomCatDebugConfiguration desde Debug Tool.

Por último, abra el navegador interno o externo y ejecute su proyecto. Si el control de ejecución alcanzó los puntos de interrupción, el eclipse solicitará una perspectiva de depuración.

Ravi MCA
fuente
47

En el directorio bin de tomcat donde se encuentra catalina.bato .sh(también conocido como {CATALINA_BASE} / bin), edite (cree si no está allí):

setenv.bat/.sh

Agregue la siguiente línea:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

Eso es todo lo que necesita hacer, no necesita editar el archivo catalina.bat(o .sh).

Vea los comentarios en catalina.bato catalina.sh.

Puede que tenga que ajustar la sintaxis para su entorno / situación particular. Por ejemplo, si ya tiene CATALINA_OPTS definido, puede hacer algo como esto (en un entorno de Windows):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

Para depurar desde Eclipse:

ejecutar-> Configuraciones de depuración ...-> Aplicación Java remota-> Nuevo

y especifique un nombre, el proyecto que está depurando y el host tomcat y el puerto de depuración especificados anteriormente.

karl
fuente
Esto está funcionando, deberá configurar este CATALINA_OPTS en setenv.sh que está en el directorio tomcat / bin. Gracias.
Amit Kumar
1
En mi setenv.bat era JAVA_OPTS (tomcat 7)
vikingsteve
Hola Philip, agregué algunas notas que podrían ayudar, si no: ¿qué versiones de os, tomcat y eclipse estás usando?
karl
en setenv.bat el bindirectorio ponga una línea como set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, use startup.batpara iniciar tomcat
Paramvir Singh Karwal
33

En el catalina.batarchivo, modifique lo siguiente.

  • Paso 1: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

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

  • Paso 3: Ejecute Tomcat desde el símbolo del sistema como se muestra a continuación: catalina.sh jpda start

  • Paso 4: luego en el eclipse crea una configuración de depuración

    1. Dé cualquier nombre para la configuración.
    2. Dar el project name.
    3. Dar el tipo de conexión como Standard(Socket Attach)
    4. hospedar como localhost
    5. puerto como 8000(o cualquier número de puerto, pero debería ser el mismo en otros lugares también).
RAJ
fuente
He encontrado CATALINA_OPTS en las siguientes partes en catalina.bat,: doStop shift set ACTION = stop set CATALINA_OPTS = goto execCmd: doConfigTest shift set ACTION = configtest set CATALINA_OPTS = goto execCmd ¿dónde editarlo? ¿Puedes simplemente subir el contenido de tu catalina.bat?
Gopakumar NG
Parece que está escribiendo lo mismo dos veces. Me salté el paso 1 y funciona. ¿Puede confirmar que no es necesario cambiar CATALINA_OPTS?
Henry Aloni
para la diferencia entre ver CATALINA_OPTS y JPDA_OPTS ver: stackoverflow.com/questions/11222365/…
Mike R
1
Esto no funcionará en Tomcat 8. Para que funcione en Tomcat 8, debe omitir el paso 1.
Dave
@RAJ. Funcionó totalmente en Tomcat 6. Muchas gracias.
T8Z
7

Muchas de las respuestas anteriores son correctas, pero recuerde que, de forma predeterminada, el depurador solo escuchará en localhost. Si está depurando un servidor remoto , deberá especificar la dirección IP para escuchar, por ejemplo

JPDA_OPTS = "- agentlib: jdwp = transporte = dt_socket, dirección = 10.1.1.33 : 8000, servidor = y, suspender = n"

catalina.sh jpda inicio

Tenga en cuenta que la dirección ahora es 10.1.1.33 : 8000

Por supuesto, también puede verificar qué IP se está utilizando realmente, ejecutando

netstat -an

tanto en Windows como en Linux y filtrar el puerto con find(Windows) o grep(Linux).

LENGUADO
fuente
Creo que te refieres a qué PUERTO se está utilizando realmente, no qué IP .
Abdollah
1
No, me refiero a "dirección IP". Si realiza una depuración remota (desde otra máquina), debe poder especificar una dirección IP que sea diferente de localhost o 127.0.0.1. Por supuesto, siempre necesitará también el número de puerto.
DAB
5

Simplemente ejecute ./catalina.sh jpda start(bifurcaciones) o ./catalina.sh jpda run(no bifurcaciones, no se menciona en la ayuda). Todas las opciones mencionadas aquí tienen valores cuerdos por defecto.

atamanroman
fuente
5

Permítanme compartirles la forma sencilla de habilitar el modo de depuración remota en tomcat7 con eclipse (Windows).

Paso 1: abra el archivo bin / startup.bat
Paso 2: agregue las siguientes líneas para depurar con la opción JDPA (debería comenzar la línea del archivo)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Paso 3: en el mismo archivo .. ve al final del archivo modifica esta línea -

    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

paso 4: luego simplemente ejecute bin> startup.bat (ahora su servidor tomcat se ejecutó en modo remoto con el puerto 8000).

Paso 5: después de eso, conectemos su proyecto de origen mediante eclipse IDE con el cliente remoto.

paso 6: En el IDE de Eclipse, vaya a "Configuración de depuración"

paso 7: haga clic en "aplicación java remota" y luego haga clic en "Nuevo"

paso 8. en la pestaña "conectar" establezca el valor del parámetro

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

paso 9: haga clic en aplicar y depurar.

así que finalmente su cliente remoto eclipse está conectado con el servidor tomcat en ejecución (modo de depuración).

Espero que este enfoque pueda ayudarte.

Saludos..

Mayen
fuente
4

Modifica catalina.bat para agregar

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

y

CATALINA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

Opcional: agregue la siguiente línea para ejecutar el modo de depuración de forma predeterminada cuando ejecuta startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse o STS seleccione la configuración de depuración haga clic derecho -> nuevo

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address
Shermi
fuente
Esta información es para WINDOWS, pero estaba en Windows y me ayudó. ¡Gracias!
Ring el
2

Si todo lo anterior no funciona, siempre puede agregarlo al script

    set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
shachar
fuente
2

En tomcat 7, catalina.sh tiene este código:

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 implica que puede configurar JPDA con:

export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n

O con:

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

Y finalmente usa:

catalina.sh jpda start

Saludos

Marcelo Salazar
fuente
Tomcat 8: Las variables JPDA_ se pueden configurar en setenv.sh sin la necesidad de 'exportarlas'. En cualquier caso, el primer parámetro de la llamada de inicio debe ser 'jpda'. Si inicia tomcat como servicio, lo mejor es modificar el script $ {CATALINA_HOME} /bin/startup.sh, agregar el parámetro 'jpda' en la última línea antes de 'start': ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
Heri
1

Estaba teniendo este problema mientras ejecutaba Tomcat dentro de un contenedor Docker. Para solucionar este problema, asegúrese de agregar el argumento '-p 8000: 8000' en su comando docker run para exponer este puerto a su máquina local. Por supuesto, también necesitará el archivo setenv.sh en su $ {CATALINA_HOME} / bin / dentro de su contenedor.

Cheen
fuente
0

Modificar startup.bat con CATALINA_OPTS Y JPDA_OPTS no funcionó para mí, pero agregarlos a catalina.bat sí

  1. Modificar catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transporte = dt_socket, dirección = 8000, servidor = y, suspender = n"

JPDA_OPTS = "- agentlib: jdwp = transporte = dt_socket, dirección = 8000, servidor = y, suspender = n"

  1. Modificar startup.bat para incluir jpda

cambiar la llamada "% EXECUTABLE%" start% CMD_LINE_ARGS% a

llamar "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Luego configure la aplicación java remota en sus configuraciones de depuración en Eclipse.

David Stableforth
fuente
0

En primer lugar, si abre catalina.bat con el editor de texto, verá que: "No establezca las variables en este script ..." Así que nunca lo cambie en ese script, en su lugar, puede seguir los pasos a continuación:

  1. Le aconseja crear un nuevo archivo bat con el nombre "setenv.bat".
  2. Luego, establezca 2 variables en ese archivo bat como:

    set CATALINA_OPTS = "- Xdebug -Xrunjdwp: transporte = dt_socket, dirección = 8000, servidor = y, suspender = n"

    establecer JPDA_OPTS = "- agentlib: jdwp = transporte = dt_socket, dirección = 8000, servidor = y, suspender = n"

  3. Por último, ejecute eso en cmd que: "catalina.bat jpda start"

  4. En IDE, cree una configuración de depuración remota y establezca el host en la IP del servidor relacionado y el puerto en 8000.

Mustafa Kemal
fuente
0

Para la versión apache-tomcat-8.5.28 simplemente haga esto,

catalina.bat jpda start

Como la configuración predeterminada ya configurada para nosotros en catalina.bat como

si no es "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Así que no hay necesidad de ninguna otra configuración. Y cuando ejecuta el comando catalina.bat jpda start, puede ver que se abre el puerto de depuración 8000.

Lyju I Edwinson
fuente
-2

Para apache-tomcat-8.5.28

modificar JDPA_OPTScomo el siguiente y luego ejecutar comocatalina.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
fuente