Re: Complex DWARF expressions

Eli Zaretskii
2014-09-22T19:06:43Z

> Date: Mon, 22 Sep 2014 20:44:12 +0200
> From: Jan Kratochvil <jan.kratochvil@redhat.com>
> Cc: yao@codesourcery.com, gdb@sourceware.org
>
> On Mon, 22 Sep 2014 20:21:14 +0200, Eli Zaretskii wrote:
> > Why can't GDB apply all this, and show a value for a given PC?
>
> There is some reason why GDB could not determine it, this is very normal
> situation. It would be really great if GDB could always display all values
> for -O2 -g code but that can never be possible (without reducing runtime code
> peformance and size).

Are you saying that whenever GDB can successfully interpret this
information and extract a value, it simply shows that value? If so, I
think we should add to the DWARF gobbledygook a note to the effect
that GDB wasn't able to glean the value from that info, and maybe even
say why (like what info was missing to interpret that).

If the computation is expensive, we could have an option to enable it.
There are situations in debugging when you'd kill to know the value of
some key variable, I'm sure you know this.

And btw, how did you get the information you showed, like this:

> <8><1663ca>: Abbrev Number: 24 (DW_TAG_GNU_call_site)
> <1663cb> DW_AT_low_pc : 0x814d44f
> <1663cf> DW_AT_abstract_origin: <0x15e7bc>
> <9><1663d8>: Abbrev Number: 3 (DW_TAG_GNU_call_site_parameter)
> <1663d9> DW_AT_location : 1 byte block: 52 (DW_OP_reg2 (edx))
> <1663db> DW_AT_GNU_call_site_value: 1 byte block: 30 (DW_OP_lit0)

Can GDB show it (and if so, by which command), or is this from objdump
or some such?

> For example the call site may not have matching DW_AT_GNU_call_site_value
> because the value is just no longer computable at the caller frame from any
> data at that point of execution. Entry values improved the number of cases
> where the value is retrievable but it is still far from 100% retrievability.

We should say explicitly that GDB is unable to decypher the data,
otherwise what we show the user looks like a teaser.

> One needs to use -O0 -g to get the values in 100% of cases.

When I'm debugging a crash of an optimized binary, and don't yet have
a recipe to reproduce the crash, compiling without optimizations is
not a useful option.

Thanks.