Estoy tratando de solucionar un problema en mi aplicación Java que no arroja errores, sin excepciones y ni siquiera bloquea la aplicación (parece que la falla ocurre en un hilo separado).¿Cómo puedo depurar fallas silenciosas en aplicaciones Java?
El problema parece estar dentro de una llamada a una función de biblioteca (es JAXBContext.newInstance(String)
si eso importa). El programa alcanzará la línea justo antes de la llamada, pero no la que está justo después. Mis bloques catch
no se ingresan y el programa simplemente continúa ejecutándose.
El problema se produce al intentar presentar una respuesta XML a una solicitud web que entró a través de Struts. La solicitud se ha manejado y el código debe ordenar el objeto de respuesta. El cliente recibe una respuesta de inmediato (por lo que el código no parece colgarse), pero está vacío.
He establecido un punto de interrupción justo antes de la línea problemática, pero el depurador simplemente se ejecuta sobre él, no tengo ni idea por qué.
Estoy usando eclipse y la aplicación se ejecuta dentro de un contenedor OSGi (Apache Felix) que se inició con -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y
. Desde dentro de Eclipse, utilizo la configuración de depuración para "Aplicación Java remota" para conectar el depurador.
¿Cuáles son las técnicas para llegar a ese problema?
¿Estás seguro de que el IDE apunta al mismo código fuente que formó los binarios en el servidor? –
Sí, todo está en mi máquina local y el contenedor OSGi ejecuta el código directamente desde el directorio de salida de mi IDE. –
No estoy familiarizado con el contenedor OSGi, ¿lo hace, como JBoss, mueve los binarios desplegados a otro directorio? Intentaría hacer un cambio en tu código, un System.out.println o algo similar, luego asegúrate de que se ejecute para confirmar esto. Normalmente encuentro que el depurador omitiendo líneas de código indica que el IDE y el servidor no están sincronizados entre sí. –