Re: sizeof evaluates expression to compute size?

Senthil Kumar Selvaraj <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On Wed, Sep 16, 2015 at 07:56:32AM -0700, Joel Brobecker wrote:
> >   Is it true that gdb evaluates the expression in a "print
> >   sizeof(expression)" to figure out the size?
> 
> Yes; it actually evaluates the entire expression (including the use
> of the sizeof operator).
> 
> >   For one expression on the ARM target 
> > 
> >      print sizeof((char*)(s->m)
> 
> The expression is incomplete; but with the expression you gave and
> assuming we're just missing a closing parenthesis, I don't see why
> it would need to allocate memory in the inferior. Perhaps you've found
> a bug.

Here's a more complete testcase.

typedef struct tagFoo
{
    int x;
    char arr[10];
} Foo;

Foo *pFoo;
int main()
{
  return 1;
}

Compiling with
$ gcc test.c -O0 -g3

and then starting gdb (native x86_64, v7.10) gives
$ gdb a.out
>>> print sizeof((char*)pFoo->arr) 
evaluation of this expression requires the target program to be active

Starting the program, putting a breakpoint on malloc, and then executing
the above command  causes the breakpoint to be hit.

Evaluation works fine without the cast to char*
>>> print sizeof(pFoo->arr)
$2 = 10

Should I file a bug?

Regards
Senthil
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.