Я хочу написать простую визуализацию Java-программы, отображая вызовы метода программы как ветви дерева. Это можно сделать довольно просто, если сама программа сообщит визуализации, что она делает, но я хочу иметь возможность делать это с любым методом / классом Java, а не только с теми, которые я изменяю для этого.
Что мне нужно, так это возможность наблюдать методы, которые вызывает программа, и какие методы вызываются в этом методе и так далее. Очевидно, трассировки стека обеспечивают именно эту функциональность:
java.lang.NullPointerException
at MyClass.mash(MyClass.java:9)
at MyClass.crunch(MyClass.java:6)
at MyClass.main(MyClass.java:3)
Итак, я подумал о том, чтобы программа, которую я хочу контролировать, выполнялась в потоке, а затем просто смотрела на стек этого потока. Однако класс потока на самом деле не поддерживает это. Он поддерживает только печать текущий стек.
Теперь я, конечно, подумал о том, чтобы просто изменить PrintStream класса System, чтобы поток печатал свой стек в my PrintStream, но это выглядит как-то неправильно.
Есть ли лучший способ сделать это? Существуют ли какие-либо ранее существующие классы / методы, которые я могу использовать?
Кроме того, в настоящее время я загружаю исходный код Java, чтобы проверить, как именно класс потока печатает свой стек, чтобы я мог, возможно, создать подкласс потока и имитировать метод dumpStack () с помощью моего собственного метода getStack ().