Java 程序流从主
假设Java 程序流从主,java,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().doSomethingInMetho
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做过类似的事情
那么如何实现它呢?如果您想要一般地记录任何给定程序的执行流,您可以使用字节码指令插入。考虑使用和实现你的目标。看看这个
无论如何,这并不容易,但肯定是可行的。您想分析类并检查所有可能的代码路径,还是运行程序并逐步了解执行过程中发生的情况?换句话说,这是静态分析还是动态分析?这比源代码更有帮助吗?至少源代码不含糊。您想创建描述程序的英文散文吗?为此,您需要构建Java编译器的等价物,其目标是英文散文而不是字节码。你的结果充其量也是站不住脚的。@MarkoTopolnik:好吧,op可以尝试把它编译成莎士比亚的语言,这一点都不站不住脚;-)在你看来,“找到程序流程”是什么意思?程序流的复杂度与源代码的复杂度顺序相同,因此,为了从重写源代码之外获得任何好处,您需要引入一些有损转换规则,从it中提取一个方面或另一个方面。感谢链接,我将遵循它