Thread dump programmatically /JDI (Java Debugger Interface)

£可爱£侵袭症+ 提交于 2019-11-27 21:38:36
VonC

Did you consider the remote alternative ? I.e. VisualVM

jps and jstack are also useful tools included in JDK 5, providing a quick command line method for obtaining stack traces of all current threads.

This article suggest JDI is also used as a remote tool.

So I am not sure you can triggers a thread dump within your own program, instead you find a way to send to yourself a SIGQUIT signal (kill -3) on Unix platforms, or press the Ctrl-\ key on Unix or Ctrl-Break on Windows platforms.

Plus, JDI wasn't intended to be used to debug the same process in which the JDI client is running. Still this thread I just linked to is the closest I have found to actually use JDI within the same program.

There is a third way: Thread.getAllStackTraces()

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

This is much easier than the debugger interface...

You can get just about all the Thread info you need including deadlocks from http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Thread.getAllStackTraces() dumps only the execution trace of all the threads, but doesn't give the information of object locks that have been obtained by a particular thread or the lock on which a particular thread has been waiting. Basically, we'll not be able to nail down deadlocks with this.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!