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()) 等...
根据我在网上看到的内容: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()) 等...