[Dwarf-Discuss] Lexical block address ranges when nesting
ron.brender at charter.net
Mon Nov 10 04:56:28 PST 2008
Martin Day wrote:
> Thanks for all the replies on this issue...
>I guess the question is : can the debugger just rely on the address
ranges to determine which variables are in scope or should it just use
the scope block types (subroutine, lexical block, inlined subroutine,
etc.) or must it use both?
I guess the answer is: the debugger *definitely* must use the scope
block types *as well as* the address ranges. The several distinct DIE
scope types are defined by DWARF for the simple reason that they are
necessary for a producer to accurately describe the compiled code and
for the consumer to accurately reconstruct the program state for a user.
Which is not to say that DWARF provides all the tools that might
possibly be needed. There are any number of optimizations that cannot
yet be properly described (for example, code merging that destroys scope
nesting, many/most dependence analysis based optimizations, and lots of
others). Indeed, in many cases it is not clear that a "proper"
description is even feasible! We are always open to ideas and proposals
for how to improve DWARF for optimized code--especially based on real
Conversely, my take is that few compiler/debugger products today even
come close to exploiting the full descriptive capability that is already
available in DWARF.
> I agree with Ron's email too. I think it would probably be helpful to explicitly
state this in the standard.
At the risk of stating what seems like it should be obvious, we might
add a sentence to the end of third paragraph of 3.4 that reads something
"The addresses associated with a lexical block necessarily include
the addresses associated with any nested lexical block."
Does that address (boo, hiss!) your concern?
More information about the Dwarf-Discuss