从我在网上看到的内容: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类时没有结果
答案 0 :(得分:1)
SDG是一个用于分析Java代码的java库。它处理java源/字节代码,转换为图形。如果使用BFS或DFS进行迭代,它会为您提供一系列指令(代码),包括被调用方法指令。
在上面的例子中,A类迭代指令。每个节点都是那里的指令。检索节点后,您不打印它,因此上述类没有输出。
如果添加以下行,则可以正常工作。
System.out.println("Instruction is " + node.getName());
Node类中还有其他方法,比如sourceline(getLine()),source是调用者还是没有(getCaller),什么是指令类型(getType())等...