假设
public class A{
public void doSomethingInMethodA(){
int a =0;
System.out.println("value of a :"+a);
}
public static void main(String[] args) {
new A().doSomethingInMethodA();
new B().doSomethingInMethodB();
}
}
class B{
public void doSomethingInMethodB(){
int b =0;
System.out.println("value of b :"+b);
C c = new C();
c.doSomethingInMethodC();
}
}
class C{
public void doSomethingInMethodC(){
int c =0;
System.out.println("value of c :"+c);
}
}
现在我怎么能以编程方式知道程序的流程。
喜欢如果我将类A的名称(带有main方法的类)提供给某个解析器类,那么解析器类应该告诉我程序的流程,如
修改:
A(class with main)
-> doSomethingInMethodA()(Class A)
-> doSomethingInMethodB()(Class B) ->doSomethingInMethodC()(Class C)
program flow ends
where -> means it calls
我想通过反思这是不可能的,因为你不能问java.lang.reflect.Method你调用哪些方法?
是否可以使用StackTraceElement
?我甚至听说AspectJ做过这样的事情
那么如何实现呢?
答案 0 :(得分:0)
如果要一般性地记录任何给定程序的执行流程,可以使用字节码检测。考虑使用java.lang.instrument和ASM来实现您的目标。看一下这个tutorial。
这无论如何都不容易,但它肯定是可行的。