2008-10-27 6 views
6

Мне нравится создавать программный дамп потока. Я узнал, что там в основном два способа сделать это:Программный программный пул нитей/JDI (интерфейс отладчика Java)

  1. Используйте "Java Virtual Machine Interface Tool" JVM-TI
  2. Используйте более абстрактную "Java Debugger Интерфейс" Jdi

Для JVM-TI я смог найти полезную информацию, но мне пришлось бы написать JNI-DLL, который, по крайней мере, на данный момент, я бы хотел избежать. С JDI я могу использовать Java, и, похоже, я могу использовать его из приложения. Но я не смог найти для него какой-то учебник или HOWTO. Единственной документацией, которую я смог найти, были Java-Docs http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/, что не очень полезно, потому что оно не показывает мне, как использовать эти классы.

Итак, кто-нибудь знает о хорошем учебнике/книге, который я мог бы прочитать?

Thx за помощь!

ответ

1

Вы считаете удалённую альтернативу? То есть VisualVM

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

jps and jstack также полезные инструменты включены в JDK 5, обеспечивая быстрый метод командной строки для получения трассировки стека всех текущих потоков.

Эта статья предлагает JDI также используется как remote tool.

Поэтому я не уверен, что вы можете запускать дамп потока в своей собственной программе, вместо этого вы найдете способ отправить себе сигнал SIGQUIT (kill -3) на платформах Unix или нажать клавишу Ctrl- \ на Unix или Ctrl-Break на платформах Windows.

Плюс, JDI wasn't intended to be used to debug the same process in which the JDI client is running. Тем не менее этот поток, с которым я только что связался, является самым близким, который я нашел, чтобы использовать JDI в рамках одной и той же программы.

+0

Спасибо, теперь по крайней мере у меня есть конкретный форум, где я могу спросить! – BugSlayer 2008-10-27 13:02:29

3

Thread.getAllStackTraces() сбрасывает только выполнения след все потоки, но не предоставляет информацию о блокировках объектов, которые были получены конкретным потоком или блокировкой, на которой ожидал определенный поток. В принципе, мы не сможем с этим справиться.