2009-06-10 25 views
188

Tengo una aplicación Java que se ejecuta en una máquina Linux. Corro el uso de Java utilizando la siguiente:Depuración remota de una aplicación Java

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n 

he abierto el puerto 4000 para TCP en esta máquina Linux. Uso eclipse desde la máquina con Windows XP e intento conectarme a esta aplicación. También abrí el puerto en Windows.

Ambas máquinas están en la LAN, pero parece que no puedo conectar el depurador a la aplicación Java. ¿Qué estoy haciendo mal?

+0

¿Qué error estás obteniendo? – Glen

+0

https://stackoverflow.com/a/46171836/1619407 –

Respuesta

387

Editar: Me di cuenta de que algunas personas están cortando y pegando la invocación aquí. La respuesta que di originalmente fue relevante solo para el OP. He aquí un estilo de invocación más moderna (incluyendo el uso del puerto más convencional de 8000):

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments> 

Respuesta original sigue.


Prueba esto:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp 

dos puntos aquí:

  1. No hay espacios en la opción runjdwp.
  2. Las opciones vienen antes del nombre de la clase. ¡Cualquier argumento que tenga después del nombre de la clase son argumentos para su programa!
+5

[Documentación oficial de JDPA Connection and Invocation] (http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html# Invocación) –

+2

@DJGummikuh ¡Bien! He actualizado la publicación para usar la opción '-agentlib' del estilo más nuevo para tu placer de cortar y pegar. :-) –

+0

¿Necesitamos siempre que el código fuente de la aplicación remota esté presente en la máquina donde hacemos la depuración remota? – testerjoe2

26

Pasos:

  1. iniciar la aplicación Java remota con opciones de depuración como se ha dicho en el post anterior.
  2. Configure Eclipse para la eliminación remota de errores especificando el host y el puerto.
  3. Inicie la depuración remota en Eclipse y espere a que la conexión se realice correctamente.
  4. Configura el punto de interrupción y la depuración.
  5. Si desea depurar desde el inicio de la aplicación use suspend = y, esto mantendrá la aplicación remota suspendida hasta que se conecte desde eclipse.

Ver Step by Step guide on Java remote debugging para más detalles.

65

Para JDK 1.3 o anterior:

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006 

Para JDK 1,4

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

Para más reciente de JDK:

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

favor cambia el número de puerto en función de sus necesidades.

De java technotes

De 5.0 en adelante, la opción -agentlib: jdwp se usa para cargar y especificar las opciones en el agente JDWP. Para versiones anteriores a 5.0, se usan las opciones -Xdebug y -Xrunjdwp (la implementación 5.0 también admite las opciones -Xdebug y -Xrunjdwp pero la opción -agentlib: jdwp más nueva es preferible ya que el agente JDWP en 5.0 usa la interfaz JVM TI a la máquina virtual en lugar de la interfaz JVMDI mayores)

Una cosa más a tener en cuenta, desde JVM Tool interface documentation:

JVM TI se introdujo en el JDK 5.0. JVM TI reemplaza a Java Virtual Machine Profiler Interface (JVMPI) y Java Virtual Machine Debug Interface (JVMDI) que, a partir de JDK 6, ya no se proporcionan.

+0

Lo siguiente funciona con la configuración predeterminada de Eclipse: -agentlib: jdwp = transporte = dt_socket, servidor = y, dirección = 8000 – Sundae

0

Así es como se debe configurar Eclipse depurador para la depuración remota:

Configuración de Eclipse:

botón 1.Click the Run
2.Seleccione las Configuraciones de depuración
3 . Seleccione la "Aplicación Java remota"
4. Nueva configuración

  • Nombre: GatewayPortalProject
  • Proyecto: GatewayPortal portlets
  • tipo de conexión: zócalo Adjuntar
  • Propiedades de conexión: i) localhost ii) 8787

para JBoss:

1. Cambie el /path/toJboss/jboss-eap-6.1/bin/standalone.conf en la máquina virtual de la siguiente manera: de comentario la siguiente línea quitando el #:

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n" 

Para Tomcat:

En catalina.bat archivo:

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: Ejecutar Tomcat desde símbolo del sistema, como a continuación:

catalina.sh jpda start 

Luego hay que establecer puntos de interrupción en las clases de Java que el deseo de depuración.

-3

La mejor opción de depuración es crear registros y analizar registros. Pero en algunos casos necesitamos depurar la aplicación web implementada en el servidor.

Ver Remotely debug a java web application enlace. El flujo completo de depuración remota se describe aquí. Espero que ayude

+1

¿En serio? Para analizar un flujo de solicitud, habilitaré el registro para todas las solicitudes, lo implementaré y pasaré por GB de registro. –

+0

Le proporcioné la forma alternativa de depurar la aplicación Spring MVC y el registro de sí es la mejor manera de depurar la aplicación remota. Si tienes una mejor opción, házmelo saber para que podamos usarlo en el futuro ... –

Cuestiones relacionadas