我想通过将程序的方法调用显示为树的分支来编写 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() 方法。