Java系统依赖图API

时间:2015-05-05 09:49:58

标签: java dependencies code-analysis

从我在网上看到的内容: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();

    }
    }

}

阶级事实:

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);
    }

}

当我运行A类时没有结果

1 个答案:

答案 0 :(得分:1)

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

在上面的例子中,A类迭代指令。每个节点都是那里的指令。检索节点后,您不打印它,因此上述类没有输出。

如果添加以下行,则可以正常工作。

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

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