[prev in list] [next in list] [prev in thread] [next in thread] 

List:       soot-list
Subject:    [Soot-list] Callgraphs, CHATransformer
From:       eric.bodden () mail ! mcgill ! ca (Eric Bodden)
Date:       2009-03-12 14:35:43
Message-ID: 804e3c660903120735w60d3d79vcd0beee177f37f0e () mail ! gmail ! com
[Download RAW message or body]

> Maybe this helps for you.

Not really. A VM just exiting without calling System.exit(..)
certainly looks like a VM bug to me. I don't see what else could cause
this...

Eric

>
>
> Greetings,
> Marco.
>
>
> Eric Bodden schrieb am 2009-02-18 18:45:
>>
>> To me this seems to be a bug in Sun's JVM. There is no call to
>> System.exit(..). Yet, as you wrote, the call to
>> CallGraphBuilder.build() never returns.
>>
>> I have seen such behavior on Sun JVMs before. Could you try another
>> VM, e.g. IBM's J9?
>>
>> Eric
>>
>> 2009/2/18 Marco Bakera <marco.bakera at tu-dortmund.de>:
>>>
>>> Hi Eric,
>>>
>>> thank you for the fast answer. I tried the following code but again Soot
>>> exits
>>> when invoking the main method. Further, I was not able to see the scene
>>> transformer's internalTransform method being invoked.
>>>
>>> Could you please tell me what is the problem with my simple
>>> implementation?
>>>
>>>
>>> public class CallGraphGenerationTest {
>>>
>>> ? ? ? @Test
>>> ? ? ? public void testCallGraphGeneration() throws Exception {
>>> ? ? ? ? ? ? ? G.reset();
>>>
>>> ? ? ? ? ? ? ? CallGraphFetcher callGraphFetcher = new CallGraphFetcher();
>>> ? ? ? ? ? ? ? PackManager.v().getPack("wjtp").add(new
>>> Transform("wjtp.cgfetcher",
>>> callGraphFetcher));
>>>
>>> ? ? ? ? ? ? ? String args = "-w " + OmgClass.class.getName();
>>>
>>> System.out.println("CallGraphGenerationTest.testCallGraphGeneration()
>>> invoking soot with "+args);
>>> ? ? ? ? ? ? ? Main.main(args.split(" "));
>>> ? ? ? }
>>>
>>> ? ? ? private static class CallGraphFetcher extends SceneTransformer {
>>>
>>> ? ? ? ? ? ? ? private CallGraph callGraph;
>>>
>>> ? ? ? ? ? ? ? @Override
>>> ? ? ? ? ? ? ? protected void internalTransform(String phaseName, Map
>>> options) {
>>>
>>> System.out.println("CallGraphFetcher.internalTransform() fetching call
>>> graph from scene");
>>> ? ? ? ? ? ? ? ? ? ? ? this.callGraph = Scene.v().getCallGraph();
>>> ? ? ? ? ? ? ? }
>>>
>>> ? ? ? ? ? ? ? public CallGraph getCallGraph() {
>>> ? ? ? ? ? ? ? ? ? ? ? return callGraph;
>>> ? ? ? ? ? ? ? }
>>> ? ? ? }
>>>
>>> ? ? ? private static class OmgClass {
>>>
>>> ? ? ? ? ? ? ? private int a;
>>> ? ? ? ? ? ? ? private int b;
>>> ? ? ? ? ? ? ? @SuppressWarnings("unused")
>>> ? ? ? ? ? ? ? private int stop;
>>>
>>> ? ? ? ? ? ? ? public OmgClass(int a, int b) {
>>> ? ? ? ? ? ? ? ? ? ? ? this.a = a;
>>> ? ? ? ? ? ? ? ? ? ? ? this.b = b;
>>> ? ? ? ? ? ? ? }
>>>
>>> ? ? ? ? ? ? ? public void omfg(int c) {
>>> ? ? ? ? ? ? ? ? ? ? ? for (int i=a; i<c; i++) {
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println(c+b);
>>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? omfg(--c);
>>> ? ? ? ? ? ? ? ? ? ? ? }
>>> ? ? ? ? ? ? ? }
>>>
>>> ? ? ? ? ? ? ? public static void main(String[] args){
>>> ? ? ? ? ? ? ? ? ? ? ? OmgClass it = new OmgClass(1, 10);
>>> ? ? ? ? ? ? ? ? ? ? ? it.omfg(6);
>>> ? ? ? ? ? ? ? }
>>> ? ? ? }
>>> }
>>>
>>>
>>> Best regards,
>>> Marco.
>>>
>>> On Wednesday 18 February 2009 15:21:03 Eric Bodden wrote:
>>>>
>>>> Hi.
>>>>
>>>> At the point at which you call transform(), nothing at all has been
>>>> initialized. You should put your call to transform() into a
>>>> SceneTransformer, preferably within the wjtp pack. Then you have to
>>>> call Soot's main method. This will automatically take care of parsing
>>>> the command line, initializing Soot accordingly and then calling your
>>>> transformer.
>>>>
>>>> You may want to look at our tutorials, especially into this one here
>>>> that explains the various packs and also how to insert a transform:
>>>> http://www.bodden.de/2008/11/26/soot-packs/
>>>>
>>>> Eric
>>>>
>>>> 2009/2/18 Andr? Lobitz <andre-lobitz at gmx.de>:
>>>>>
>>>>> I am trying to create callgraphs using soot. Therefore i've added the
>>>>> Soot-classes.jar to my library list and written a small class (see
>>>>> below). I am only getting the error message
>>>>> ? ?[Call Graph] For information on where the call graph may be
>>>>> incomplete, use the verbose option to the cg phase.
>>>>> and a NullPointerException. It seems to be the call
>>>>> ? ?CHATransformer.v().transform();
>>>>> throwing the Exception. Can anyone help me?
>>>>>
>>>>> Thanx,
>>>>> Andr?
>>>>>
>>>>>
>>>>> -------------------------------------------------------------------------
>>>>>
>>>>> --------------------------------------------------------------------------
>>>>> -----------------
>>>>>
>>>>> package diplom.main;
>>>>>
>>>>> import soot.jimple.toolkits.callgraph.*;
>>>>> import java.util.Iterator;
>>>>> import soot.Scene;
>>>>> import soot.SootClass;
>>>>> import soot.SootMethod;
>>>>> import soot.options.Options;
>>>>>
>>>>> public class SootTest {
>>>>>
>>>>> ? ?public static void main(String[] args) {
>>>>> ? ? ? ?CHATransformer.v().transform();
>>>>>
>>>>> ? ? ? ?Options.v().set_whole_program(true);
>>>>> ? ? ? ?SootClass mainClass =
>>>>> Scene.v().loadClassAndSupport("diplom.testers.omg");
>>>>> ? ? ? ?mainClass.setApplicationClass();
>>>>> ? ? ? ?Scene.v().setMainClass(mainClass);
>>>>>
>>>>> ? ? ? ?SootMethod src = mainClass.getMethodByName("main");
>>>>> ? ? ? ?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);
>>>>> ? ? ? ?}
>>>>> ? ?}
>>>>> }
>>>>>
>>>>> -------------------------------------------------------------------------
>>>>>
>>>>> --------------------------------------------------------------------------
>>>>> -----------------
>>>>>
>>>>> package diplom.testers;
>>>>>
>>>>> public class omg {
>>>>>
>>>>> ? ?int a;
>>>>> ? ?int b;
>>>>> ? ?int stop;
>>>>>
>>>>> ? ?public omg(int a, int b){
>>>>> ? ? ? ?this.a = a;
>>>>> ? ? ? ?this.b = b;
>>>>> ? ?}
>>>>>
>>>>> ? ?public void omfg(int c){
>>>>> ? ? ? ?for (int i=a; i<c; i++){
>>>>> ? ? ? ? ? ?System.out.println(c+b);
>>>>> ? ? ? ? ? ?omfg(--c);
>>>>> ? ? ? ?}
>>>>> ? ?}
>>>>>
>>>>> ? ?public static void main(String[] args){
>>>>> ? ? ? ?omg it = new omg(1, 10);
>>>>> ? ? ? ?it.omfg(6);
>>>>> ? ?}
>>>>>
>>>>> }
>>>>>
>



-- 
Eric Bodden
Sable Research Group, McGill University
Montr?al, Qu?bec, Canada

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic