Formatting of function pointer value

Daniel Jacobowitz drow@false.org
Fri Jul 8 13:58:00 GMT 2005


On Fri, Jul 08, 2005 at 12:00:44PM +0400, Vladimir Prus wrote:
> 
> Hello,
> consider the following snippet:
> 
>     B* p2 = (B*)0x12345678;
>     int (*p3)(int) = (fp)0x000000AE;
> 
> the value of p2 is printed like this:
> 
>    (gdb)info local
>    ....
>    p2 = (B *) 0xb8000540
> 
> 
> the value of *p3 is printed like this:
> 
>    (gdb) print *p3 
>    $1 = {int (int)} 0xb7ee6e9c <__DTOR_END__+4>
> 
> I have a couple of questions:
> 
> 1. Why in both cases the type of value is printed? There's already 'whatis'
> command. I've checked that code and it's printed unconditionally. As the
> result, a GDB frontend must strip the type.

It is a feature, not a bug.  Why is your frontend using the
command-line interface?  DON'T do that!  Use MI nowadays, please please
please.

The type is included because "print p2; $1 = 0x12345678" is very
uninformative; that's how we print integers, not pointers.

> 2. Why the type is enclosed in parenthesis in the first case, and in braces
> in the second case? This entails additonal problems for GUI frontend, for
> example, at the moment KDevelop thinks that the opening brace in the second
> case starts a composite.

Code addresses are treated specially.  Same reason why you get a symbol
name, I expect...

-- 
Daniel Jacobowitz
CodeSourcery, LLC



More information about the Gdb mailing list