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

Kishen Das kishen.das at gmail.com
Tue Jul 6 05:17:46 EDT 2010


Ok, I haven't set the entry points and that was the problem.

Kishen

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

> 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/20100706/1485bd3e/attachment-0001.html 


More information about the Soot-list mailing list