Pergunta

Eu gosto de gerar um despejo de thread de programação. Eu aprendi que há uma basicamente duas formas de fazê-lo:

  1. Use o "Java virtual Machine Tool" JVM-TI
  2. Use o maior abstraído "Java Debugger Interface" JDI

Para a JVM-TI eu era capaz de encontrar alguma informação útil, mas eu teria que escrever uma JNI-DLL que, pelo menos para o momento, eu gostaria de evitar. Com a JDI posso usar Java e parece que eu sou capaz de usá-lo de dentro do aplicativo. Mas eu não era capaz de encontrar algum tipo de tutorial ou HOWTO para ele. A única documentação que eu poderia encontrar, foram o Java-Docs http: //java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ que não é muito útil, porque não me mostrar como usar este classes.

Então, alguém sabe de um bom tutorial / livro eu poderia ler?

Thx para qualquer ajuda!

Foi útil?

Solução

Você considera a alternativa remoto? Ou seja, VisualVM

despejo thead com VisualVM

jps e jstack são ferramentas também úteis incluídos no JDK 5, proporcionando um método de linha de comando rápida para obtenção de rastreamentos de pilha de tópicos atuais.

Este artigo sugerem JDI é também usado como um ferramenta remota .

Então, eu não tenho certeza que você pode gatilhos um despejo de thread dentro do seu próprio programa, em vez disso você encontrar uma maneira de enviar para si mesmo um sinal SIGQUIT (matar -3) em plataformas Unix, ou pressione a tecla Ctrl \ no Unix ou Ctrl-quebra em plataformas Windows.

Além disso, JDI não se destina a ser usado para depurar o mesmo processo em que o cliente está em execução JDI . Ainda esta discussão eu apenas ligado a é o mais próximo que eu encontrei para realmente usar JDI dentro do mesmo programa.

Outras dicas

Há uma terceira via: Thread.getAllStackTraces ()

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

Este é muito mais fácil do que o depurador de interface ...

Você pode obter apenas sobre toda a informação Tópico você precisa, incluindo bloqueios de http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Thread.getAllStackTraces () despeja apenas o traço execução de todos os tópicos, mas não dá a informação de bloqueios de objetos que tenham sido obtidos por um segmento específico ou o bloqueio em que um segmento específico tem sido esperando. Basicamente, nós não vai ser capaz de pregar para baixo impasses com este.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top