Java 系统依赖图 API

标签 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类时没有结果

最佳答案

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

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

如果你添加下面一行,那么它就有效。

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

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

关于Java 系统依赖图 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049591/

相关文章:

java - 集成到服务器的 PayPal API

Java 输入/输出。 delete() 方法不从目录中删除创建的文件

java - Java 为某个导入选择哪个 JAR?

c# - 如何分解我的代码行?

java - 多线程访问同一个文本文件

java - 如果运行 JSF 应用程序时未通过 Maven 添加,IntelliJ 是否不使用外部 Jar?

java - 管理OSGi依赖 hell

c# - 生成的代码 (xsd.exe) 的 SuppressMessage 编译器警告 CS1591

vb.net - 不要将文字作为本地化参数传递

java - 将值传递给小程序