This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: Problems outputting a string
On Fri, Feb 28, 2003 at 01:13:19PM -0500, jacques wrote:
> woops, had the gdb output paste wrong, here it is(everything else was
> correct):
>
>
> bash-2.05b$ gdb tetete.o
> GNU gdb 5.3
> Copyright 2002 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "i686-pc-linux-gnu"...
> (gdb) b 7
> Breakpoint 1 at 0x80486ad: file /home/palomer/tetete.cpp, line 7.
> (gdb) r
> Starting program: /home/palomer/tetete.o
>
> Breakpoint 1, foo() () at /home/palomer/tetete.cpp:7
> 7 return ret;
> (gdb) p ret
> $1 = {static npos = 4294967295,
> _M_dataplus = {<allocator<char>> = {<No data fields>},
> _M_p = 0xbffff7a0
> "T\233\004\ba"+$ at ?÷y"?\035\205\004\bT_\022 at a"+$ at ?÷y"?d\n\023 at \
> 001"}, static _S_empty_rep_storage = {0, 0, 0, 0}}
The short version: If you get a CVS snapshot of GDB (see
http://sources.redhat.com/gdb/ for how to get one) this will be fixed.
The long version, for the curious:
The debug info for ret says:
<2><bdba>: Abbrev Number: 107 (DW_TAG_variable)
DW_AT_name : ret
DW_AT_decl_file : 1
DW_AT_decl_line : 5
DW_AT_type : <7759>
DW_AT_location : 3 byte block: 91 8 6 (DW_OP_fbreg: 8; DW_OP_deref; )
Note the DW_OP_deref at the end. decode_locdesc et al. support
arguments which are frame-base relative and passed by reference, but
not variables which are stored by reference. Oops.
However, LOC_COMPUTED handles this perfectly gracefully. It would make
a great test-case; I'll add it later.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer