On Wed, Oct 5, 2011 at 4:10 PM, Diego Novillo <dnovi...@google.com> wrote:
> On Wed, Oct 5, 2011 at 09:45, Richard Guenther
> <richard.guent...@gmail.com> wrote:
>> On Wed, Oct 5, 2011 at 3:18 PM, Diego Novillo <dnovi...@google.com> wrote:
>>> On 11-09-27 03:37 , Richard Guenther wrote:
>>>>
>>>> On Tue, Sep 27, 2011 at 9:35 AM, Richard Guenther
>>>> <richard.guent...@gmail.com>  wrote:
>>>>>
>>>>> On Tue, Sep 27, 2011 at 9:14 AM, Jakub Jelinek<ja...@redhat.com>  wrote:
>>>>>>
>>>>>> On Mon, Sep 26, 2011 at 03:05:00PM -0700, Lawrence Crowl wrote:
>>>>>>>
>>>>>>> There a non-transparent change in behavior that may affect some users.
>>>>>>> The inline functions will introduce additional lines in a sequence of
>>>>>>> gdb 'step' commands.  Use 'next' instead.
>>>>>>
>>>>>> That is IMHO a serious obstackle.  If anything, the inlines should
>>>>>> use always_inline, artificial attributes, but don't know if GDB treats
>>>>>> them
>>>>>> already specially and doesn't step into them with step.
>>>>>> Also, I'm afraid it will significantly grow cc1plus/cc1 debug info.
>>>>>>
>>>>>> The .gdbinit macro redefinition Paolo posted sounds to be a better
>>>>>> approach.
>>>>>
>>>>> Yeah, I already see me typing s<return>finish<return>  gazillion of times
>>>>> when
>>>>> trying to step into a function call that produces a function argument
>>>>> ... there is
>>>>> already the very very very annoying tree_code_length function that you
>>>>> get for
>>>>> each TREE_OPERAND (...) macro on function arguments.  I'd be very opposed
>>>>> to any change that makes this situation worse.
>>>>
>>>> tree_operand_length actually.  Please produce a patch that makes this
>>>> function
>>>> transparent to gdb, then I might be convinced converting the other macros
>>>> to
>>>> such function might be worthwhile.
>>>>
>>>> Thanks,
>>>> Richard.
>>>
>>> I think we need to find a solution for this situation.  The suggestions I
>>> see in this thread are nothing but workarounds to cope with current
>>> debugging limitations.  We have learned to live with them and hack around
>>> them, but debugging GCC is already a daunting task, and I think we can
>>> improve it.
>>>
>>> Richard, yes, stepping into one-liner inline functions can be aggravating
>>> (particularly with some of the 2-3 embedded function calls we have in some
>>> places).  However, the ability to easily inspect state of data structures
>>> using the standard accessors is fundamental. Particularly, for developers
>>> that may not have the extensive knowledge of internals that you do.
>>
>> It is much more important to optimize my debugging time as experienced
>> developer resources are more scarce than some random unexperienced
>> guy that happens to dig into GCC.
>>
>> ;)
>>
>> or not really ;).
>
> You are being facetious, I hope.  Part of the reason that experienced
> developers are scarce is precisely because dealing with GCC's code
> base is so daunting.  We should be trying to attract those random
> inexperienced developers, not scare them away.
>
> The experienced developers will retire, eventually.  Who is going to
> replace them?
>
>
>>> Jakub, is size of a debuggable cc1/cc1plus really all that important? Yes,
>>> more debug info makes for bigger binaries.  But when debugging, that hardly
>>> matters.  Unless we were talking about a multi-Gb binary, which we aren't.
>>>
>>> I would like to solve this problem for all inline functions that we may not
>>> care to step into.  There is a whole bunch of one-liners that generally
>>> annoy me: tree_operand_length, gimple_op, ... in fact, all the gimple
>>> accessors, etc.
>>>
>>> How about one of these two ideas?
>>>
>>> 1- Add -g to the list of supported settings in #pragma GCC optimize (or
>>> create a new #pragma GCC no_debug).  This way, we can brace all these one
>>> liners with:
>>>
>>> #pragma push_options
>>> #pragma GCC optimize ("-g0")
>>> [ ... inline functions ... ]
>>> #pragma pop_options
>>>
>>>
>>> 2- Similar to #1, but with __attribute__ in each function declaration. I
>>> think I prefer #1 since it's simpler for the user to specify.
>>>
>>>
>>> This would also let us generate smaller debug binaries, since the bracketed
>>> functions would not get any debug info at all.
>>>
>>> Any reason why that scheme couldn't work?  It works well for separate TUs.
>>
>> If you crash inside those -g0 marked functions, what happens?
>
> You don't see the body of the function, but you can go up into the
> exact call site.
>
>> Why
>> not use the artificial attribute on them instead?  At least what is 
>> documented
>> is exactly what we want (well, at least it seems to me).
>
> Yes, I forgot to mention in my reply.  I tried it, but you still step
> into the functions.  If this is a bug with the attribute, then it
> could be fixed.

Did you also mark the function with always_inline?  That's a requirement
as artificial only works for inlined function bodies.

>> Thus, produce a patch that improves tree_operand_length with either
>> approach so we can test it.
>
> I have a slight preference for making these functions totally opaque
> to the debugger.  But may be there is a setting we can use that will
> not affect step and still give us some debug info in the presence of
> crashes.
>
> Tom, Cary, Ian, any suggestions?  We are trying to figure out a
> compromise for tiny inline functions that are generally a nuisance
> when debugging.  The scenario is a call like this: big_function_foo
> (inlined_f (x), inlined_g (y));
> We want to use 's' to step inside the call to big_function_foo(), but
> we don't want to step into either inlined_f() or inlined_g().
>
> I tried __attribute__((artificial)), but that is either buggy on the
> gcc side or the gdb side, because I am still getting into the inlined
> function (with -g3).
>
> I proposed extending #pragma GCC options to bracket these functions
> with -g0.  This would help reduce the impact of debug info size.
>
> Thoughts?
>
>
> Thanks.  Diego.
>

Reply via email to