[Soot-list] Using CHATranformer

Chandan Rupakheti rupakhcr at clarkson.edu
Tue Jun 23 15:04:45 EDT 2009


Hello,

I am trying to use Soot's call graph. As a starting point I wanted to try
CHATransformer. I have two classes in "callgraph" package as follows:

----------------------------------------------------
public class PrintCallGraph {
    public static void main(String[] args) {
        soot.options.Options.v().set_whole_program(true);

        SootClass mainClass =
Scene.v().loadClassAndSupport("callgraph.Main");
        mainClass.setApplicationClass();
        Scene.v().setMainClass(mainClass);

        CHATransformer.v().transform();
        SootMethod src = mainClass.getMethodByName("aMethod");
        CallGraph cg = Scene.v().getCallGraph();

        Iterator targets = new Targets(cg.edgesOutOf(src));
        while (targets.hasNext()) {
            SootMethod tgt = (SootMethod)targets.next();
            System.out.println(src + " may call " + tgt);
        }
    }
}
----------------------------------------------------
public class Main {
    public static void main(String[] args) {
        aMethod();
    }

    public static void aMethod() {
        Main main = new Main();
        main.hello();
    }

    public void hello() {
        System.out.println("Hello World!");
    }
}
----------------------------------------------------

When I run PrintCallGraph, I get following NullPointerException:

[Call Graph] For information on where the call graph may be incomplete, use
the verbose option to the cg phase.
Exception in thread "main" java.lang.NullPointerException
    at
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.getImplicitTargets(OnFlyCallGraphBuilder.java:250)
    at
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:182)
    at
soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:81)
    at
soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:84)
    at
soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:43)
    at soot.SceneTransformer.transform(SceneTransformer.java:39)
    at soot.SceneTransformer.transform(SceneTransformer.java:45)
    at soot.SceneTransformer.transform(SceneTransformer.java:50)
    at callgraph.PrintCallGraph.main(PrintCallGraph.java:19)

I would be very thankful if anybody could point me what am I doing wrong.

Thanks,

Chandan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20090623/f9cd6f32/attachment.html 


More information about the Soot-list mailing list