[Soot-list] Howto generate a CallGraph?

bq chan cbqios at gmail.com
Wed Jul 16 04:58:05 EDT 2008


Sorry to bother you again. I was really frustrated:(   I still have trouble
with generating CallGraphs .

Would you please give me a trivial example to show me how to generate the
CallGraph please.

the tutorial examples in
"~/soot-2.3.0/tutorial/guide/examples/call_graph/src/ " doesn't work for
me.



[root at localhost testers]# java -Xms256m -Xmx512m -Xss128m
dk.brics.soot.callgraphs.CallGraphExample -w testers/CallGraphs
[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:282)
        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 CallGraphExample.main(CallGraphExample.java:25)

I have also tried the following code, but:

[cbq at localhost cg]$ java -Xms512m -Xmx1024m -Xss128m  CgMain -w  CgMain
wjtp
Soot started on Wed Jul 16 16:53:18 CST 2008
No main class given. Inferred 'CgMain' as main class.
[Call Graph] For information on where the call graph may be incomplete, use
the verbose option to the cg phase.
Segment fault

public class CgBody extends SceneTransformer
{
    private static CgBody instance;
    private CgBody() {}
    public static CgBody v()
    {
    if(instance == null)
        instance = new CgBody ();
    return instance;
    }

    protected void internalTransform ( String phaseName, Map options)

    {
    CallGraph cg =Scene.v().getCallGraph();
    G.v().out.println(cg);
    G.v().out.println("size"+cg.size());

    SootMethod src = Scene.v().getMainMethod();

    Iterator targets = new Targets(cg.edgesOutOf(src));
        while (targets.hasNext())
                {
            SootMethod tgt = (SootMethod)targets.next();
            System.out.println(src + " may call " + tgt);
        }


    }

}



public class CgMain
{
    public static void main(String[] args)
    {
    Pack pack=PackManager.v().getPack("wjtp");
    pack.add(new Transform("wjtp.cgtrans",CgBody.v()));
    soot.Main.main(args);

    }

}






2008/5/6 Eric Bodden <eric.bodden at mail.mcgill.ca>:

> I agree with Li. What are you running it on? What's "CallGraphs"?
>
> Eric
>
> --
> Eric Bodden
> Sable Research Group
> McGill University, Montréal, Canada
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20080716/ab15d61d/attachment.htm


More information about the Soot-list mailing list