来自main的程序流程

时间:2014-08-24 14:11:08

标签: java

假设

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做过这样的事情

那么如何实现呢?

1 个答案:

答案 0 :(得分:0)

如果要一般性地记录任何给定程序的执行流程,可以使用字节码检测。考虑使用java.lang.instrumentASM来实现您的目标。看一下这个tutorial

这无论如何都不容易,但它肯定是可行的。