Pregunta

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

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. Yo uso eclipse desde la máquina de Windows XP y tratar de conectarse a esta aplicación. He abierto el puerto en Windows también.

Las dos máquinas están en la LAN pero me parece que no puede conectar el depurador a la aplicación Java. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Editar Me di cuenta de que algunas personas están cortando y pegando la invocación aquí. La respuesta que he dado originalmente era relevante sólo 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 se entregan antes de que el nombre de la clase. Cualquier argumento que tiene después de que el nombre de la clase son argumentos a su programa!

Otros consejos

En el 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

Por favor, cambiar el número de puerto en función de sus necesidades.

A partir de notas técnicas java

  

A partir de la 5.0 en adelante -agentlib: jdwp opción se utiliza para cargar y especificar   Opciones para el agente JDWP. Para versiones anteriores a 5.0, la -Xdebug y   se utilizan las opciones -Xrunjdwp (la implementación 5.0 también es compatible con las opciones -Xdebug y -Xrunjdwp pero la más reciente -agentlib: opción JDWP es preferible como agente JDWP en 5,0 utiliza la interfaz JVM TI a la   VM en lugar de la anterior interfaz JVMDI)

Una cosa más que observar, desde JVM Tool documentación de la interfaz :

  

JVM TI se introdujo en JDK 5.0. JVM TI reemplaza el Java Virtual Machine Profiler Interface (JVMPI) y la máquina virtual Java interfaz de depuración (JVMDI) que, como de JDK 6, ya no se proporciona.

pasos:

  1. Iniciar la aplicación Java remota con opciones de depuración como se ha dicho en el post anterior.
  2. Configurar Eclipse para la depuración remota especificando host y el puerto.
  3. Inicio de la depuración remota en Eclipse y esperar a que la conexión con éxito.
  4. Configuración de punto de interrupción y de depuración.
  5. Si desea depurar desde el inicio del uso de aplicaciones suspender = y, esto mantendrá aplicación remota suspendido hasta que se conecte de eclipse.

guía paso a paso en el control remoto de Java depuración para más detalles.

respuesta cubriendo Java> = 9:

Para Java 9+, la opción de JVM necesita un ligero cambio anteponiendo la dirección con la dirección IP de la máquina que alberga la JVM, o simplemente *:

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

Esto es debido a un cambio observó en https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435 .

Para Java <9, el número de puerto es suficiente para conectar.

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

Configuración de Eclipse:

1.Click el botón Ejecutar
2.Select las Configuraciones de depuración
3.Seleccione el “Java remoto de aplicaciones”
Configuración 4.New

  • Nombre: GatewayPortalProject
  • Proyecto: GatewayPortal-portlet
  • Tipo de conexión: Conector hembra Adjuntar
  • Propiedades de la conexión: i) localhost ii) 8787

Para JBoss:

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

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

Para Tomcat:

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.

Me gustaría hacer hincapié en que orden de los argumentos es importante .

Para mi comando java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar abre el puerto depurador

pero java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 comando no .

La mejor opción de depuración es la creación de registros y análisis de registros. Pero en algunos casos hay que depurar aplicaciones web desplegadas en el servidor.

Consulte remotamente depurar un enlace de la aplicación java web . flujo completo de depuración remota se describe aquí. Esperamos que le ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top