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

2014-10-05 Thread Daniel Gutson
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.

Feedback?

Thanks!

   Daniel.


-- 

Daniel F. Gutson
Chief Engineering Officer, SPD


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211

Skype: dgutson
___
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org


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

2014-10-05 Thread Daniel Gutson
On Sun, Oct 5, 2014 at 12:47 PM, Michael Eager  wrote:
> 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.

It's not a solution, because the problem is not identifying the
function (the constructor
in this case), but the CALL to the constructor.
Why? Because the same class could have several global instances, and non-global
(attributes, local) instances.
So what is needed is to identify the invoking places.

>
>
> --
> Michael Eagerea...@eagercon.com
> 1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



-- 

Daniel F. Gutson
Chief Engineering Officer, SPD


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211

Skype: dgutson
___
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org


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

2014-10-05 Thread Daniel Gutson
On Sun, Oct 5, 2014 at 1:07 PM, Michael Eager  wrote:
> On 10/05/14 08:57, Daniel Gutson wrote:
>>
>> On Sun, Oct 5, 2014 at 12:47 PM, Michael Eager  wrote:
>>>
>>> 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.
>>
>>
>> It's not a solution, because the problem is not identifying the
>> function (the constructor
>> in this case), but the CALL to the constructor.
>> Why? Because the same class could have several global instances, and
>> non-global
>> (attributes, local) instances.
>> So what is needed is to identify the invoking places.
>
>
> If what you want to do is break at all constructors/destructors, I

No, not *all*, only for those instances which ar grlobal

> don't see why you need to break at the calling site.

because otherwise I would break in all non-global instances' construction too.

>
> Can you give an example?

OK:

struct Base
{
Base(int) {}
};

struct Der: Base
{
Der(int x) : Base(x) {}
};

Base b1; // break here
Der d1;   // break at d1's ctor body, not during Der::Base construction

int main()
{
   Base b2;  // don't break here
   Der d2;// ditto
}



>
>
> --
> Michael Eagerea...@eagercon.com
> 1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



-- 

Daniel F. Gutson
Chief Engineering Officer, SPD


San Lorenzo 47, 3rd Floor, Office 5

Córdoba, Argentina


Phone: +54 351 4217888 / +54 351 4218211

Skype: dgutson
___
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org


Re: [Dwarf-Discuss] C++14 and C++03 (vs C++98)

2014-11-26 Thread Daniel Gutson
(Sorry top posting)
What about new C++11 keywords? Would a debugger cli interpreter be helped by 
this datum in case the user enters some of these keywords? (I can bring the 
list, only "noexcept" comes from the top of my mind currently)
-Original Message-
From: Mark Wielaard 
Sender: "Dwarf-Discuss" Date: Wed, 26 
Nov 2014 11:23:21 
To: 
Subject: Re: [Dwarf-Discuss] C++14 and C++03 (vs C++98)

Looks like Tom's reply never made the dwarf mailinglist.
So here it is to make the archive on this issue complete.

On Tue, 2014-11-25 at 09:02 -0700, Tom Tromey wrote:
> Michael> Issue 120628.1 mentions a need to distinguish between C++03 and other
> Michael> versions of C++.  If you believe that DW_LANG_C_plus_plus_03 is not
> Michael> necessary, I suggest that you discuss this with the submitter, Tom
> Michael> Tromey, to understand why he believes that this is required.
> 
> Mark & I discussed it and I couldn't remember any reason that this was
> needed.
> 
> Tom

___
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org
___
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org


Re: [Dwarf-Discuss] C++14 and C++03 (vs C++98)

2014-11-26 Thread Daniel Gutson
On Wed, Nov 26, 2014 at 11:00 AM, Mark Wielaard  wrote:
> On Wed, 2014-11-26 at 13:22 +0000, Daniel Gutson wrote:
>> What about new C++11 keywords? Would a debugger cli interpreter be
>> helped by this datum in case the user enters some of these keywords?
>
> Yes, that is the intention. If there are different language variants
> that have different keywords or when certain DWARF constructs can be
> interpreted differently depending on the version used in the source. For
> C++11 there certainly is a usage.
>
> But C++03 does not change the language in any way from C++98 represented

Yes, IIRC it's a corrigendum actually. I got misled by the subject of
the email :) sorry.

> by DW_LANG_c_plus_plus. It really isn't a different language variant,
> just some library extensions (and the library will be described by
> existing DWARF constructs already). So the question is whether the
> proposed DW_LANG_c_plus_plus_03 constant is actually needed, and if
> adopted by DWARFv5, how a producer and consumer need to interpret it.
>
> Cheers,
>
> Mark



-- 

Daniel F. Gutson
Chief Engineering Officer, SPD

San Lorenzo 47, 3rd Floor, Office 5
Córdoba, Argentina

Phone:   +54 351 4217888 / +54 351 4218211
Skype:dgutson
LinkedIn: http://ar.linkedin.com/in/danielgutson
___
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org