Re: gcj and debugging

Andrew Haley <[email protected]> Mon, 11 Feb 2013 16:32:37 +0000
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
On 02/11/2013 04:26 PM, Michael Haupt wrote:
> Tom,
> 
> thank you very much for your reply.
> 
> Am 07.02.2013 um 19:47 schrieb Tom Tromey <[email protected]>:
>> Michael> in a research project, I'm generating DWARF debugging info for machine
>> Michael> code generated from Java. I looked at some of the DWARF debug info
>> Michael> generated by gcj (including that contained in libgcj.so).
>>
>> I think the first thing to realize is that the gdb support for Java was
>> all written to target gcj specifically, and also written long ago and
>> then barely updated.
>>
>> It isn't very general or done the way it would be done now.
>> It was never updated for the gcj binary compatibility ABI.
> 
> Would you suggest to generate DWARF info with the language set to C89 then, to avoid misleading gdb?
> 
>> I thought things like "print array[0]" used to work, but even that seems
>> to fail for me now.  There is definitely some code for this in gdb, see
>> jv-valprint.c:java_value_print.  It seems to know a bit about array
>> layout and then goes from there (though the code looks somewhat bogus to
>> me...).  See also jv-lang.c:evaluate_subexp_java for the code that tries
>> to do array subscripting.
> 
> If gdb's Java language support is really tailored to gcj, it surely assumes internal layout details about arrays. I cannot guarantee that "my" arrays have the same internal representation. :-)
> 
>> gdb has special code for this.  It looks for a type named
>> "java.lang.String" and then knows what fields it has.
>>
>> Yucky.
> 
> Indeed.

The Right Way to do it, as is done with the thread library, is to have
a target library that GDB opens which contains accessor methods for all
of the VM's structures.

Andrew.