String arguments in kaffe

Patrick Tullmann kaffe@rufus.w3.org
Tue, 25 Aug 1998 12:44:34 -0600


Harish Sankaran wrote:
> Before a method is actually executed ,I want to trap the string
> arguments(if any) in the method in the JVM.

I'm curious why you'd want to do this dynamically (as methods are
executed), and not when String objects are created, but I'll assume
you've got good reasons...

> For eg. if there is a method in the class
> g.drawstring("Welcome",10,20) I want to trap the string "Welcome"
> before the method is actually executed.  I tried printing the
> arguments in the function "virtualMachine" in machine.c by printing
> arg[0].v.tword,arg[1].tword etc.  The co-oridnates gets printed ok
> but for some reason I was not able to print the string by giving
> arg[2].v.tstr.

arg[2].v.taddr will be the address of an Hjava_lang_String* object.
The data is stored in the ->data->value array of Java chars.  value is
an array object which has its own ->data->body elements which is where
the string data is stored (as Java chars).  Here's a GDB macro
to print out a Kaffe Java String object.  So, depending on what you
want to do in your with the string, it might get complicated.

   define pJavaString
     set $strcount = ($arg0).data.count
     set $strstart = ($arg0).data.offset
     set $chararr = ($arg0).data.value
     if $strcount < 1
       printf "(String is zero length)\n"
     else
       set $i = 0
       while $i < $strcount
   	printf "%c", ($chararr.data.body)[$i + $strstart]
   	set $i = $i + 1
       end
       echo \n
     end
   end 

-Pat