Java 系统依赖图 API

Java System Dependence Graph API

根据我在网上看到的内容:PDG 或 SDG 可以给我一棵依赖关系树 我尝试了一个简单的例子,但我没有结果

我做了什么:

 import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import org.objectweb.asm.tree.analysis.AnalyzerException;

import com.graph.element.Node;
import com.graph.internal.NodeNotFoundException;
import com.graph.sdg.SystemDependenceGraph;;

public class A {

    public static void main(String[] args) throws FileNotFoundException, IOException, AnalyzerException, NodeNotFoundException {
        SystemDependenceGraph lvSystemDependenceGraph 
        =new SystemDependenceGraph("C:\Users\amina\workspace\SDG\fact","C:\Users\amina\workspace\SDG\fact\bin\Fact.class");
Iterator<Node> lvIterator =lvSystemDependenceGraph.controlDependenceBFSIterator();
    while (lvIterator.hasNext()) {
        Node lvNode = lvIterator.next();

    }
    }

}

class事实:

public class Fact {

    public static void main(String[] args) {
        int f;
        int n;
        n=4;
        f=1;
        while(n!=0){
            f=f*n;
            n=n-1;
        }
        System.out.println("f= "+f+" n= "+n);
    }

}

当我运行classA没有结果

SDG 是一个 java 库,用于分析 java 代码。它处理 java sources/byte 代码,转换成图形。如果您使用 BFS 或 DFS 进行迭代,它会为您提供一系列指令(代码),包括被调用方方法指令。

在上面的示例中,Class A 正在迭代指令。每个节点都是那里的一条指令。检索节点后,您没有打印它,因此上面 class 没有输出。

如果你添加下面一行,那么它就可以了。

   System.out.println("Instruction is " + node.getName());

Node class 中还有其他方法,如 sourceline(getLine())、source 是否是调用者 (getCaller)、指令类型是什么 (getType()) 等...