[Soot-list] incomplete callgraph

Eric Bodden eric.bodden at mail.mcgill.ca
Tue Jan 23 19:56:22 EST 2007


Could you guys try the verbose option?

Java soot.Main -p cg verbose:true ...

That usually prints warning for everything that is omitted from a call
graph.


Eric


> -----Original Message-----
> From: soot-list-bounces at sable.mcgill.ca [mailto:soot-list-
> bounces at sable.mcgill.ca] On Behalf Of Peng Gao
> Sent: Tuesday, January 23, 2007 7:27 PM
> To: Toth.Gabriella.2 at stud.u-szeged.hu
> Cc: soot-list at sable.mcgill.ca
> Subject: Re: [Soot-list] incomplete callgraph
> 
> I have a similar problem here, for example:
> 
> public class ClassI{
>      public static void main(String[] args) throws Exception{
>          BufferedReader in = new BufferedReader(new InputStreamReader
> (System.in));
>          String input = in.readLine();
>          Class clazz = Class.forName(input);
>          Object obj = clazz.newInstance();
>      }
> }
> 
> I am sure I used -W option however I could not find any NEWINSTANCE
> edge in the call graph.
> 
> 
> On 23/01/2007, at 8:06 PM, Toth.Gabriella.2 at stud.u-szeged.hu wrote:
> 
> > Hi!
> > I have this example:
> >
> > class A{
> >   int a;
> >   public A(int i){
> >     a=i;
> >   }
> >   public int geta(){
> >     return a;
> >   }
> >   public void seta(int i){
> > 	a=i;
> >   }
> > }
> >
> > class B{
> >   int b;
> >   public B(int j){
> >       b=j;
> >     }
> > 	 public int getb(){
> >     return b;
> >   }
> >     void setb(int i){
> >       b=i;
> >     }
> > }
> > class C2{
> > 	int c;
> >   A a=new A(5);
> >   static B b=new B(6);
> > 	 public C2(int j){
> >       c=j;
> >     }
> >   public int c(){
> >
> >    return b.getb()+6/a.geta();
> >   }
> >
> >   public static void main(){
> >     C2 c = new C2(3);
> > 	b.setb(c.c());    <---
> >   }
> > }
> >
> >
> > ---------------------------------------------
> >
> > I create callgraph:
> >
> > 	CallGraphBuilder cgb = new CallGraphBuilder();
> > 		cgb.build();
> > 		cg = cgb.getCallGraph();
> >
> > The callgraph:
> >
> > CLINIT edge: $r1 = <C2: B b> in <C2: int c()> ==>
> > <java.lang.Object: void <clinit>()>
> > CLINIT edge: $r0 = <C2: B b> in <C2: void main()> ==>
> > <java.lang.Object: void <clinit>()>
> > SPECIAL edge: specialinvoke r0.<java.lang.Object: void <init>()>()
> > in <C2: void <init>()> ==> <java.lang.Object: void <init>()>
> > VIRTUAL edge: $i0 = virtualinvoke $r1.<B: int getb()>() in <C2: int
> > c()> ==> <B: int getb()>
> > VIRTUAL edge: $i1 = virtualinvoke $r2.<A: int geta()>() in <C2: int
> > c()> ==> <A: int geta()>
> > VIRTUAL edge: virtualinvoke $r0.<B: void setb(int)>($i0) in <C2:
> > void main()> ==> <B: void setb(int)>
> > SPECIAL edge: specialinvoke r0.<java.lang.Object: void <init>()>()
> > in <A: void <init>(int)> ==> <java.lang.Object: void <init>()>
> > SPECIAL edge: specialinvoke r0.<java.lang.Object: void <init>()>()
> > in <B: void <init>(int)> ==> <java.lang.Object: void <init>()>
> >
> > I don't find edge to c.c(). What should I do? I tried options but
> > the callgraph didn't change.
> >
> > Thanks
> > Gabi
> >
> > ----------------------------------------------------------------
> > This message was sent using IMP, the Internet Messaging Program.
> >
> > _______________________________________________
> > Soot-list mailing list
> > Soot-list at sable.mcgill.ca
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> 
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list



More information about the Soot-list mailing list