[Soot-list] java.lang.RuntimeException: There is no main class set

Kishen Das kishen.das at gmail.com
Sun Jul 4 07:43:57 EDT 2010


I am trying to generate the Call graph with two different methods.
I am copying those two methods below , if it helps to resolve the problem.
Code is in Scala, which is somewhat similar to Java, but since there is
nothing very scala-specific in the below code, people who are familiar with
Java should be able to understand it.

-----------------------------------------------------------------------------------------
private def getCallGraph(className:String):Callgraph ={

     var opts:Array[String] = Array("-w","-keep-line-number",className)
     Main.main(opts)
     var cl:SootClass  = Scene.v().loadClassAndSupport(className)

      Scene.v.setSootClassPath(Scene.v.defaultClassPath
          + ";lib/jasminsrc-2.4.0.jar"
          + ";lib/polyglotsrc-1.3.5.jar"
          + ";lib/soot-2.4.0.jar"
          + ";lib/jce.jar"
          +";.")

    Options.v().set_src_prec(Options.src_prec_java)
    Options.v().set_whole_program(true)
    Options.v().set_time(true)
    Options.v().set_verbose(true)
    Options.v().set_debug(true)
    Options.v().set_debug_resolver(true)
    cl.setApplicationClass()
    Scene.v().loadBasicClasses()
    Scene.v().setMainClass(cl)
    Scene.v().loadNecessaryClasses()
    Scene.v().addBasicClass(className)

    var thePhaseName:String  = "cg"
    var theOptions= new HashMap[String,String]
    theOptions.put("enabled", "true")
    var sctform:SceneTransformer =null
    PhaseOptions.v().setPhaseOption("cg", "implicit-entry:false")
    PhaseOptions.v().setPhaseOption("cg", "verbose:true")
    PhaseOptions.v().setPhaseOption("cg", "jdkver:4")
    PhaseOptions.v().setPhaseOption("cg", "all-reachable:true")
    PhaseOptions.v().setPhaseOption("jb.ne", "enabled:false");
    PhaseOptions.v().setPhaseOption("jj.ne", "enabled:false");
    PhaseOptions.v().setPhaseOption("jb.uce", "enabled:false");
    PhaseOptions.v().setPhaseOption("jj.uce", "enabled:false");
    PhaseOptions.v().setPhaseOption("jb.dae", "enabled:false");
    PhaseOptions.v().setPhaseOption("jj.dae", "enabled:false");
    PhaseOptions.v().setPhaseOption("jb.ule", "enabled:false");
    PhaseOptions.v().setPhaseOption("jj.ule", "enabled:false");
    PhaseOptions.v().setPhaseOption("jb.cp-ule", "enabled:false");
    PhaseOptions.v().setPhaseOption("jj.cp-ule", "enabled:false");
    PhaseOptions.v().setPhaseOption("jop", "enabled:false");
    PhaseOptions.v().setPhaseOption("wjop", "enabled:false");

    var callgraphBool=true

    if (callgraphBool)
    {
        theOptions.put("dump-html", "true")
     sctform = SparkTransformer.v()
    }
    else
    {
     sctform = CHATransformer.v()
    }

    var cg:CallGraph = Scene.v().getCallGraph()
    cg

    }

 ----------------------------------------------------------------------------------
def generateCallGraph(strClass:String):CallGraph ={

         var cg:CallGraph=null
         var opts:Array[String] = Array("-f", "n", "-w","-app",
                          "--full-resolver",
                          "-allow-phantom-refs",
                          "-p", "cg", "enabled:true",
                           "-p","jb","use-original-names:true",
                          "-p","jb.dae","enabled:false",
                           "-p", "jj", "use-original-names:true",
                           "-p","jj.dae", "enabled:false",
                           "-p","jj.ule", "enabled:false",
                          "-p", "cg", "safe-newinstance:true",
                          "-p", "cg", "safe-forname:true",
                          "-p", "cg", "all-reachable:on",
                            strClass)
         soot.Main.main(opts)

         val sootClass:SootClass  = Scene.v().loadClassAndSupport(strClass)
         sootClass.setApplicationClass()
         Scene.v().setMainClass(sootClass)
         Scene.v().loadNecessaryClasses()

         cg = Scene.v().getCallGraph();
         cg

     }

------------------------------------------------------------------------------------------------------------------
On Sun, Jul 4, 2010 at 6:20 AM, Kishen Das <kishen.das at gmail.com> wrote:

> If I do that, I am not able to pass the class name Javahelloworld as an
> argument  to the main method of Callgraph. I mean I can still hardcode the
> value within Callgraph class, but still, that doesn't seems to solve the
> problem.
>
> Kishen
>
>
> On Sun, Jul 4, 2010 at 5:22 AM, Eric Bodden <
> bodden at st.informatik.tu-darmstadt.de> wrote:
>
>> Soot has it's own classpath. In your case you want to include the
>> current directory.
>>
>> Try this:
>>
>> java -classpath
>>
>> .;lib\soot-2.4.0.jar;lib\polyglotsrc-1.3.5.jar;lib\jasminsrc-2.4.0.jar;lib\jce.jar;
>> Callgraph -cp . Javahelloworld
>>
>> Note that I added "-cp .". More information can be found here:
>>
>> http://www.sable.mcgill.ca/soot/tutorial/usage/index.html
>>
>> Eric
>>
>> --
>> Dr. Eric Bodden
>> Software Technology Group, Technische Universität Darmstadt, Germany
>> Tel: +49 6151 16-5478    Fax: +49 6151 16-5410
>> Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt
>>
>>
>>
>> On 4 July 2010 12:12, Kishen Das <kishen.das at gmail.com> wrote:
>> > java -classpath
>> >
>> .;lib\soot-2.4.0.jar;lib\polyglotsrc-1.3.5.jar;lib\jasminsrc-2.4.0.jar;lib\jce.jar;
>> > Callgraph Javahelloworld
>> > Javahelloworld class is in the current working directory.
>> > I don't think its the problem with the classpath, but may be something
>> as
>> > basic as that.
>> > Kishen
>> >
>> > On Sun, Jul 4, 2010 at 5:02 AM, Eric Bodden
>> > <bodden at st.informatik.tu-darmstadt.de> wrote:
>> >>
>> >> It appears that your classpath is wrong. For instance, Soot cannot
>> >> find Javahelloworld. Maybe that is the problem...
>> >>
>> >> If yo show us your command line then we can say more.
>> >>
>> >> Eric
>> >>
>> >> --
>> >> Dr. Eric Bodden
>> >> Software Technology Group, Technische Universität Darmstadt, Germany
>> >> Tel: +49 6151 16-5478    Fax: +49 6151 16-5410
>> >> Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt
>> >>
>> >>
>> >>
>> >> On 4 July 2010 11:00, Kishen Das <kishen.das at gmail.com> wrote:
>> >> > Dear All,
>> >> > I am very new to Soot and now trying to get a Callgraph of a Java
>> class.
>> >> > I tried various things but always get this error in windows.
>> >> > I have tried everything ( Soot and Phase options, manually setting
>> the
>> >> > MainClass, etc), but nothing seems to be working.
>> >> > I am attaching the error message below.
>> >> > Any help will be highly appreciated.
>> >> > Regards,
>> >> > Kishen
>> >> > ----------------------Error Message ---------------------------------
>> >> > Soot started on Sun Jul 04 03:46:20 CDT 2010
>> >> > Warning: javax.crypto.Cipher is a phantom class!
>> >> > Warning: javax.crypto.NoSuchPaddingException is a phantom class!
>> >> > Warning: javax.crypto.BadPaddingException is a phantom class!
>> >> > Warning: javax.crypto.IllegalBlockSizeException is a phantom class!
>> >> > Warning: javax.crypto.SecretKey is a phantom class!
>> >> > Warning: javax.crypto.spec.SecretKeySpec is a phantom class!
>> >> > Warning: Javahelloworld is a phantom class!
>> >> > java.lang.RuntimeException: There is no main class set!
>> >> >         at soot.Scene.getMainClass(Scene.java:160)
>> >> >         at soot.EntryPoints.application(EntryPoints.java:65)
>> >> >         at soot.EntryPoints.all(EntryPoints.java:95)
>> >> >         at soot.Scene.getEntryPoints(Scene.java:683)
>> >> >         at soot.Scene.getReachableMethods(Scene.java:730)
>> >> >         at
>> >> >
>> >> >
>> soot.jimple.toolkits.callgraph.CallGraphBuilder.<init>(CallGraphBuilder.java:59)
>> >> >         at
>> >> >
>> >> >
>> soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:42)
>> >> >         at soot.SceneTransformer.transform(SceneTransformer.java:39)
>> >> >         at soot.Transform.apply(Transform.java:89)
>> >> >         at soot.RadioScenePack.internalApply(RadioScenePack.java:57)
>> >> >         at
>> >> >
>> >> >
>> soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:47)
>> >> >         at soot.Pack.apply(Pack.java:114)
>> >> >         at
>> soot.PackManager.runWholeProgramPacks(PackManager.java:408)
>> >> >         at soot.PackManager.runPacks(PackManager.java:329)
>> >> >         at soot.Main.run(Main.java:198)
>> >> >         at soot.Main.main(Main.java:141)
>> >> >         at
>> >> > firepile.compiler.Reachable$.getCallGraph(Reachable.scala:147)
>> >> >         at firepile.compiler.Reachable$.main(Reachable.scala:75)
>> >> >         at firepile.compiler.Reachable.main(Reachable.scala)
>> >> >         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> >> >         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
>> Source)
>> >> >         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>> >> > Source)
>> >> >         at java.lang.reflect.Method.invoke(Unknown Source)
>> >> >         at
>> >> >
>> >> >
>> scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:81)
>> >> >         at
>> >> >
>> >> >
>> scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
>> >> >         at
>> >> >
>> >> >
>> scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:86)
>> >> >         at
>> >> >
>> >> >
>> scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:81)
>> >> >         at
>> >> >
>> >> >
>> scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:86)
>> >> >         at
>> >> > scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:83)
>> >> >         at
>> >> > scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
>> >> > _______________________________________________
>> >> > Soot-list mailing list
>> >> > Soot-list at sable.mcgill.ca
>> >> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>> >> >
>> >> >
>> >
>> >
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.cs.mcgill.ca/pipermail/soot-list/attachments/20100704/725b3603/attachment-0001.html 


More information about the Soot-list mailing list