2008-10-27 16 views
6

Me gusta generar un volcado de subprocesos mediante programación. He aprendido que hay unos básicamente dos maneras de hacerlo:Volcado de subprocesos mediante programación/JDI (Interfaz de depuración de Java)

  1. Utilice la opción "Interfaz Virtual Machine Tool Java" JVM-TI
  2. Uso de la más alta abstraída "depurador de Java Interface" JDI

Para la JVM-TI pude encontrar información útil, pero tendría que escribir una JNI-DLL que, al menos por el momento, quisiera evitar. Con JDI puedo usar Java y parece que puedo usarlo desde dentro de la aplicación. Pero no pude encontrar algún tipo de tutorial o HOWTO para ello. La única documentación que pude encontrar fueron los Java-Docs http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ que no son muy útiles, porque no me muestran cómo usar estas clases.

Así que, ¿alguien sabe de un buen tutorial/libro que podía leer?

Thx por cualquier ayuda!

Respuesta

1

¿Consideró la alternativa remota? Es decir. VisualVM

thead dump with visualVM http://java.sun.com/javase/6/docs/technotes/guides/visualvm/images/applications-window-menu.png

jps and jstack también son herramientas útiles incluyen en JDK 5, proporcionando un método de línea de comandos rápida para la obtención de trazas de la pila de todas las discusiones actuales.

En este artículo se sugieren JDI también se utiliza como un remote tool.

Así que no estoy seguro de que pueda desencadenar un volcado de hilo dentro de su propio programa, sino que encuentre una manera de enviarse una señal SIGQUIT (kill -3) en plataformas Unix, o presione la tecla Ctrl en UNIX o Ctrl-Break en las plataformas de Windows.

Plus, JDI wasn't intended to be used to debug the same process in which the JDI client is running. Todavía este hilo con el que acabo de vincular es el más cercano que he encontrado para usar JDI en el mismo programa.

+0

Gracias, ahora por lo menos tengo un foro específico donde puedo pedir! – BugSlayer

+0

De nada. Si este es el enfoque más útil, no olvide aceptar esta respuesta;) – VonC

+0

Tenga en cuenta que el enfoque de conexión jvisualvm solo funciona para "propias" JVM y no para otras. Esto incluye cuando se ejecuta como un servicio de Windows. –

3

Thread.getAllStackTraces() vuelca únicamente la traza de ejecución de todos los hilos, pero no proporciona la información de bloqueos de objetos que se han obtenido mediante un hilo en particular o el bloqueo en el que un hilo en particular ha estado esperando. Básicamente, no seremos capaces de bloquear los bloqueos con esto.

Cuestiones relacionadas