do you need to do this in a static context, or can you instrument your
application and then run it?  If you can run it, you can write a very basic
aspect (maybe using aspectj, http://eclipse.org/aspectj) that will print
anything you want, including this.toString() and the invoked method name,
whenever a method is invoked.  it's not exactly what you're asking for, but
your problem is likely to be undecidable in general in any case :)

sandmark (http://cgi.cs.arizona.edu/~sandmark/download.html) has a
StackSimulator class (maybe  sandmark.analysis.stacksimulator.StackSimulator,
but it's been a while) that can tell you at any point in a method what's on
the stack and what instructions might have put it there.  that might get you
pretty far.

On 11/30/05, Atam <[EMAIL PROTECTED]> wrote:
>
> Hi Nam,
>
> thanks for the reply,
> i realy appreciate your time and help for this.
>
> First, the var table is not in the code segment of the method. I read that
> that is available if you compile with a debogging option.
> If that is not true, that it wil help me further. I will look into that.
>
> Apart from that, to know the local varaibl slot is very tricky. For every
> different invokation instruction, these are placed at different points.
> So this will be very tricky to do, and to asure 100% good behaviour i will
> need to investigate the specification of java.class to know all the
> possible
> ways.
> I hoped that there was a easier way. if you get an idea for me, plz tell
> me.
>
> Thanks again,
>
> Atam
>
>
>
> On 11/30/05, Nam T. Nguyen <[EMAIL PROTECTED]> wrote:
> >
> > Hello Atam,
> >
> > Wednesday, November 30, 2005, 10:43:00 PM, you wrote:
> >
> > > Hi all,
> >
> > > i am also newbie here, but i read alot first about BCEL. My goal is to
> > > extra from within a method, which other methods are called, and to
> > > which objects these messages are send.
> >
> > > eg
> >
> > > public voud m1()
> > > {
> > >   c2 c2obj = new c2();
> > >   c2obj.m2();
> > > }
> >
> > > Here, wihin m1() there are 2 messages: <init> and  m2().
> > > This information i can extract with the code below.  What i cannot do
> > > yet, is to know that these messages are sent to the c2obj object. So,
> > > i need the name of the OBJECT to which the messages are sent. If it is
> > > a static call, name of object is not needed.
> >
> > > If anyone can please help me with this, i would appreciate it very
> much.
> >
> > > With kind regards,
> >
> > Basiclly, you'll need two things:
> > 1. the LocalVariables attribute of that Code section
> > 2. the object (variable slot) that invoke instructions are operated on
> >
> > The first is easily obtainable. The later is more tricky.
> >
> > Normally, we would have patterns like:
> >
> > load xx
> > invokevirtual yy
> >
> > XX is then the local variable slot. Looking it up in the
> > LocalVariables table would then give you its name.
> >
> > However, this doesn't always hold true. In rare cases, the load and
> > invoke instructions are very far apart.
> >
> > Nam
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>

Reply via email to