我想通过将程序的方法调用显示为树的分支来编写 Java 程序的简单可视化。这可以通过让程序本身告诉可视化它正在做什么来完成,但我希望能够使用任何 Java 方法/类来完成此操作,而不仅仅是我修改的方法/类。
我需要的是能够观察程序调用的方法以及该方法中调用了哪些方法等等。显然,堆栈跟踪恰好提供了此功能:
java.lang.NullPointerException
at MyClass.mash(MyClass.java:9)
at MyClass.crunch(MyClass.java:6)
at MyClass.main(MyClass.java:3)
所以我考虑让我想要监视的程序在一个线程中运行,然后只查看该线程的堆栈。然而,线程类并不真正支持这一点。它仅支持打印当前堆栈。
现在我当然想到简单地更改 System 类的 PrintStream,以便线程将其堆栈打印到我的 PrintStream 中,但这感觉有点不对。
有更好的方法吗?我可以使用任何预先存在的类/方法吗?
另外,我目前正在下载 Java 源代码,以检查线程类如何准确地打印其堆栈,以便我可以子类化线程并使用我自己的 getStack() 方法来模拟 dumpStack() 方法。
最佳答案
另请参阅 VisualVM,它随最新的 Java 版本一起提供。
关于java - 从 Java 内部监控 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1617271/