Re: Problems outputting a string

Daniel Jacobowitz
2003-02-27T19:27:29Z

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"+$@?Ã·y"?\035\205\004\bT_\022@a"+$@?Ã·y"?d\n\023@\
> 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