Volcado de subprocesos mediante programación / JDI (interfaz del depurador de Java)

StackOverflow https://stackoverflow.com/questions/239544

  •  04-07-2019
  •  | 
  •  

Pregunta

Me gusta generar un volcado de hilo programáticamente. He aprendido que hay básicamente dos formas de hacerlo:

  1. Utilice la " Interfaz de herramienta de máquina virtual Java " JVM-TI
  2. Utilice la " Interfaz de depurador de Java & abstraída más elevada " JDI

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

Entonces, ¿alguien sabe de un buen tutorial / libro que pueda leer?

Gracias por cualquier ayuda!

¿Fue útil?

Solución

¿Consideraste la alternativa remota? Es decir. VisualVM

thead dump with visualVM

jps y jstack también son herramientas útiles incluidas en JDK 5, que proporcionan un método de línea de comando rápido para obteniendo trazas de pila de todos los hilos actuales.

Este artículo sugiere que JDI también se usa como herramienta remota .

Por lo tanto, no estoy seguro de que pueda desencadenar un volcado de subprocesos dentro de su propio programa, en lugar de eso, encuentra la forma de enviarse una señal SIGQUIT (kill -3) en las plataformas Unix, o presione la tecla Ctrl- \ en Unix o Ctrl-Break en plataformas Windows.

Además, JDI no fue diseñado para depurar el mismo proceso en el que se ejecuta el cliente JDI . Aún así, este hilo al que acabo de enlazar es lo más cercano que he encontrado para usar JDI dentro del mismo programa.

Otros consejos

Hay una tercera forma: Thread.getAllStackTraces ()

http: // java. sun.com/javase/6/docs/api/java/lang/Thread.html#getAllStackTraces ()

Esto es mucho más fácil que la interfaz del depurador ...

Puede obtener casi toda la información de Hilos que necesita, incluidos los interbloqueos de http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Thread.getAllStackTraces () vuelca solo la traza de ejecución de todos los subprocesos, pero no proporciona la información de los bloqueos de objetos obtenidos por un subproceso en particular o el bloqueo en el que un subproceso en particular ha estado esperando. Básicamente, no podremos cerrar los puntos muertos con esto.

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