【问题标题】:Java System Dependence Graph APIJava 系统依赖图 API
【发布时间】:2015-12-23 18:54:23
【问题描述】:

根据我在网上阅读的内容: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 类时没有结果

【问题讨论】:

    标签: java dependencies code-analysis


    【解决方案1】:

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

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

    如果您添加以下行,那么它可以工作。

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 2014-06-11
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2019-03-31
      • 2018-10-25
      • 2014-09-07
      • 1970-01-01
      相关资源
      最近更新 更多