Debug remoto con Eclipse

De ChuWiki

Introducción[editar]

Con Eclipse podemos depurar un programa java que esté corriendo, capturándolo sobre la marcha y viendo en eclipse qué es lo que está ejecutando, deteniendo la ejecución o haciéndolo avanzar paso a paso. Necesitamos, por supuesto, tener en eclipse un proyecto con los fuentes de ese programa que queremos capturar. Veamos cómo hacerlo.

Arrancar el programa[editar]

Lo primero, debemos arrancar el programa java con unas opciones especiales, que hace que el programa abra un socket por el que Eclipse se conectará para poder depurarlo. Dichas opciones son

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

En el que estamos indicando:

  • -Xdebug : Le decimos a la máquina virtual que debe permitir a un proceso remoto que se conecte para debug. Vaya, que debe dar permiso al eclipse para conectarse.
  • -Xrunjdwp:transport : Se le pasa detrás una lista de opciones separadas por comas para indicar cómo se va a establecer esa conexión
    • dt_socket : será con un socket
    • address=1044 : será por el puerto 1044
    • server=y : La máquina virtual actuará como servidor.
    • suspend=n : El programa no quedará en espera del debugger, sino que empezará a correr inmediatamente.

Si nuestro jar se llama, por ejemplo, TablaRender.jar y normalmente lo arrancaríamos con

java -jar TablaRender.jar

para que se pueda depurar remotamente, debemos arrancarlo con

java -Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n -jar TableRenderer.jar

Depurarlo con eclipse[editar]

Ahora, en eclipse, debemos engancharnos al programa. Para ello en el menú principal de eclipse elegimos "run" -> "debug configurations" y obtenemos una ventana como la siguiente



En el árbol que aparece en la ventana, seleccionamos "Remote java application" y pulsamos el botón de "crear", arriba a la izquierda. En el lado derecho de la ventana, elegimos el proyecto el que tenemos los fuentes de la aplicación remota (proyecto chuidiang-ejemplos en la foto). Más abajo, ponemos el nombre del host o pc donde está corriendo el ejecutable (localhost en el ejemplo, para indicar que el programa corre en el mismo ordenador en el que está eclipse) y el puerto por el que está atendiendo al posible debugger (1044 en el ejemplo).

Una vez rellenos los datos, pulsamos "Apply" y "Debug", con lo que empezará la depuración del código. Ahora, en los fuentes del proyecto, debemos buscar un sitio de interés y poner un breakpoint. Cuando el ejecutable externo pase por esa línea, se detendrá y podremos depurarlo normalmente.

En la vista de debug, mientras estamos depurando, tenemos en la parte superior un botón que nos permite desconectarnos del ejecutable, para terminar la depuración remota (ver imagen). Siempre podemos volver a conectarnos más adelante