[Dwarf-Discuss] Question / Proposal: breakpoints at global C++ constructors and destructors

Michael Eager eager@eagercon.com
Sun Oct 5 15:47:50 GMT 2014


On 10/05/14 07:27, Daniel Gutson wrote:
> Hello,
>
>     this is my first post to this list.
>
> Context: I've been a gdb and gcc maintainer in the past, but I'm not a
> DWARF expert, so my post is
> from the user's POV.
>
> PROBLEM: ability to break in (all) the global objects' constructors
> (that is, before main() is called),
> and destructors (after main() ).
>
> As a matter of proof of concept, we've developed a gdb script that is
> also nontrivial and imperfect.
> FWIW, there were two ways: one implementation-agnostic by regex
> finding the ctors of all objects and
> adding breakpoints in all of them, then breaking at main, disabling
> the former and continuing;
> another way was implementation-specific, knowing the internals of the
> __static_initialization_and_destruction_0
> mechanism. Our proof of concept used the first approach but had a lot of issues.
>
> So, it would be absolutely trivial if there was a DW_CTOR_CALL /
> DW_DTOR_CALL with the address
> of the call instruction, so the debugger can break on those calls, and
> do a step-into to get into the ctor/dtor body.

I don't think that a special DWARF TAG would be required for this.
You could use DW_TAG_subprogram to describe the ctor/dtor routine,
marked with with DW_AT_artificial.


-- 
Michael Eager	 eager at eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



More information about the Dwarf-discuss mailing list