Buscar..


¿Cómo funciona la depuración remota de Eclipse detrás de las escenas?

La depuración de Eclipse comienza con lo que se conoce como Agentes.

La JVM , que ejecuta las fuentes .class cumplidas, tiene una función que permite inyectar bibliotecas externas (escritas en Java o C ++) en la JVM, casi en tiempo de ejecución. Estas bibliotecas externas se denominan Agentes y tienen la capacidad de modificar el contenido de los archivos .class que se han ejecutado. Estos agentes tienen acceso a la funcionalidad de la JVM a la que no se puede acceder desde un código Java normal que se ejecuta dentro de la JVM y se pueden usar para hacer cosas interesantes como inyectar y modificar el código fuente en ejecución , la creación de perfiles, etc. Herramientas como JRebel hace uso de Esta pieza de funcionalidad para lograr su magia.

Y para pasar un Agent Lib a una JVM, lo hace a través de los argumentos de inicio, utilizando el

 agentlib:libname[=options] format.

En realidad, estábamos pasando un Agent Lib llamado jdwp a la JVM que ejecuta Tomcat. El jdwp es una implementación opcional específica de JVM del JDWP (Java Debug Wire Protocol) que se utiliza para definir la comunicación entre un depurador y un JVM en ejecución. Su implementación, si está presente, se proporciona como una biblioteca nativa de la JVM como jdwp.so o jdwp.dll

Entonces ¿Qué es lo que hace?

En términos simples, el agente jdwp que pasamos básicamente cumple la función de ser un enlace entre la instancia de JVM que ejecuta una aplicación y un depurador (que puede ubicarse de forma remota o local). Dado que se trata de una biblioteca de agentes, tiene la capacidad de interceptar el código en ejecución, crear un puente entre la JVM y un depurador y aplicar la funcionalidad de un depurador en la JVM. Ya que en la arquitectura JVM, la funcionalidad de depuración no se encuentra dentro de la JVM en sí, sino que se extrae mediante herramientas externas (a las que se hace referencia adecuadamente como depuradores), estas herramientas pueden residir en la máquina local que ejecuta la JVM que se está depurando o ejecutar. Desde la maquina externa. Es esta arquitectura modular desacoplada la que nos permite tener una JVM ejecutándose en una máquina remota y utilizando el JDWP, tener un depurador remoto capaz de comunicarse con ella.
En resumen, así es como funciona el depurador de Eclipse.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow