Pregunta

Me preguntaba si existe algo (en el mundo Java) capaz de tomar una instantánea del estado actual JVM con las siguientes características:

  • hacerlo mientras una excepción está siendo lanzada.
  • Captura de variables locales, los argumentos del método, etc.
  • Poner en un archivo útil que puede ser utilizado para extraer o reproducir en un IDE de la situación en el código fuente.

Se necesitan las dos primeras características (tercera sería impresionante). Y debe ser adecuado para su uso en producción (así, no hay manera sobre depuradores).

Antes de hacer esta He buscado a través de la WWW (el mayor tiempo posible) y me encontré con algunas indicaciones:

  • Cajoon Interceptor : Como se ha dicho en Dzone posterior , que es un agente JVM pasiva que cumplen los tres requisitos! Pero, tiene dos inconvenientes: hay que pagar por ello y el sitio está abajo (tal vez no hay posibilidad de pagar nada)
  • .
  • AVIcode Intercepción Estudio : .NET equivalente de Cajoon. Sólo para dar una idea acerca de.
  • JavaFrame : Ok, es un tweet, pero apunta a un repositorio SVN disponible que tener el código fuente (bajo licencia MIT) de un agente JVM que se ve muy bien (voy a darle una oportunidad a la misma).

Así que, tal vez estoy en busca de una solución inexistente? No es urgente, pero no tenía esta idea para un proyecto y que sería genial para explorar este "desconocido" (?) Camino y conseguir algo real.

Parece estar claro que sería un agente JVM (evento de excepción de JVMTI, por ejemplo ).

Por último, me gustaría destacar el párrafo followin de del artículo de Wikipedia control de excepciones :

  

En entornos de tiempo de ejecución, tales como   Java o .NET, no existen herramientas que   conecte al motor de tiempo de ejecución y cada   vez que una excepción de intereses   se produce, graban depuración   información que existía en la memoria en   el tiempo se emitió la excepción   (Llamar valores pila y montón). Estas   herramientas son llamadas automatizado de excepciones   Manipulación o error herramientas de interceptación   y proporcionar 'causa raíz' información   para excepciones.

Esa es la idea. Espero que alguien me puede dar una idea o tal vez, en el futuro, alguien se inspira en este humilde mensaje:)

Gracias!

¿Fue útil?

Solución

Doy un vistazo a JavaFrame y parece un buen punto de partida. Sólo tiene que instalar Apache Ant, hacer ant en el directorio javaframe y poner en marcha el conjunto de pruebas (dentro del directorio de prueba) con:

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

No puede ser cualquier variable local, sino que trata. Así que, como he dicho, puede ser un punto de partida. Espero conseguir más acerca de su uso, pero no hay tiempo y no hay documentación (hay un montón de proyectos nombrados JavaFrame) están malas circunstancias.

Tal vez algún día se puede hacer de nuevo. Si de nuevo. Hubo Cajoon, parecía prometedor y brillante, pero su sitio está abajo y no hay rastro de cualquier frasco descargable a intentarlo.

Gracias a todos!

PD .: Sólo como referencia, algunos enlaces que encontré mientras investigaba:

Otros consejos

Es posible que desee ver en el trabajo que NetBeans ha hecho en relación con el registro de uso automatizado: http: // wiki. netbeans.org/UsageLoggingSpecification .

En cuanto a volcar las variables locales, me imagino que usted podría simplemente utilizar un depurador, como el que se menciona que bajafresh4life.

Tal vez se podría hacer con AspectJ ?

No estoy seguro si esto es viable en un entorno de producción, pero no es el depurador Omnisciente:

  

¿Qué pasa si el depurador podría ir "ir hacia atrás en el tiempo?" ¿Eso haría más fácil la depuración? Con sólo registrar todas las asignaciones de variables, es posible hacer esto en esencia. Esta es la idea subyacente para la depuración omnisciente. Lo asombroso es que un número significativamente grandes programas se pueden depurar de esta manera - Ant, JUnit, el depurador en sí.

http://www.lambdacs.com/debugger/

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