[webkit-dev] Easing printf based debugging in WebKit with an helper.
Oliver Buchtala
oliver.buchtala at googlemail.com
Thu Jul 19 11:24:22 PDT 2012
On 19.07.2012 20:15, Brady Eidson wrote:
>
> On Jul 19, 2012, at 11:01 AM, Oliver Buchtala
> <oliver.buchtala at googlemail.com
> <mailto:oliver.buchtala at googlemail.com>> wrote:
>
>> On 19.07.2012 19:53, Andreas Kling wrote:
>>> On Tue, Jul 10, 2012 at 4:52 PM, Brady Eidson <beidson at apple.com
>>> <mailto:beidson at apple.com>> wrote:
>>>
>>>
>>> On Jul 10, 2012, at 5:25 AM, Alexis Menard
>>> <alexis.menard at openbossa.org
>>> <mailto:alexis.menard at openbossa.org>> wrote:
>>>
>>> > On Mon, Jul 9, 2012 at 6:53 PM, Brady Eidson
>>> <beidson at apple.com <mailto:beidson at apple.com>> wrote:
>>> >>
>>> >> On Jul 9, 2012, at 2:43 PM, Alexis Menard
>>> <alexis.menard at openbossa.org
>>> <mailto:alexis.menard at openbossa.org>> wrote:
>>> >>
>>> >>> Hi,
>>> >>>
>>> >>> For those who "secretly" use printf debugging :). I know the
>>> >>> recommended way is to use a debugger and it's not the point
>>> of this
>>> >>> discussion.
>>> >>
>>> >> A lot of us do this, and sometimes it's necessary. I agree
>>> with the gripe and support adding something easier.
>>> >>
>>> >>> So I propose wtf() and its stream operator.
>>> >>>
>>> >>> Usage :
>>> >>>
>>> >>> wtf()<<"Hello"<<"World"<<3<<4.53322323; will output : Hello
>>> World 3 4.53322
>>> >>
>>> >> There is no reason to bring in stream operators - that are
>>> willfully absent from WebCore - just for debugging.
>>> >>
>>> >
>>> > But it's really nice for that purpose, and somehow match std::cout
>>>
>>> And we quite purposefully don't use std::cout in the project.
>>>
>>> >> Overloading functions works just as well.
>>> >
>>> > I'm not sure to understand what you mean here…
>>>
>>> I mean relying on C++'s overloading of functions for the
>>> different types you'd like to printf debug.
>>>
>>> void debug(WebCore::String&);
>>> void debug(WebCore::Frame*);
>>> void debug(WebCore::Node*);
>>>
>>> etc etc etc.
>>>
>>> debug(someFrame);
>>> debug(someNode);
>>> debug(someString);
>>>
>>> Especially that last one would help me from remembering how to
>>> type "printf("%s", someString.utf8().data())" which is all I've
>>> ever really wanted.
>>>
>>>
>>> Hello fellow printfers!
>>>
>>> While I'm just as ashamed of my printf habits as the next guy, I
>>> think it'd be great if we could move forward with this somehow.
>>>
>>> Coming from a background in Qt, the stream operator syntax looks
>>> perfectly normal to me, perhaps you could expand on why we want to
>>> avoid using these in WebKit. Is there a technical reason, or is it
>>> more of a language purity issue?
>>>
>>> Regardless, adding a consistent set of
>>> debug(WebCore::MyCoolOverload) methods as suggested would still be
>>> massively useful.
>>>
>>> -Kling
>>>
>>
>> Hi,
>>
>> I am probably one of those people who much dislike printf-debugging.
>> What is your problem with using a debugger?
>
> The beauty of this discussion is that people who prefer the purity of
> using only the debugger can continue using only the debugger and
> ignore what printf'ers need to do.
>
> That said, to address your question of "what is your problem with
> using a debugger", many issues in WebKit are highly timing related, or
> highly dependent on multiple threads or even multiple processes
> interacting.
>
> Many crashes I've had the pleasure of working on go away simply by
> hitting a breakpoint, and many misbehaviors correct themselves the
> same way.
>
> Most of the time the debugger is good enough for me. Other times the
> mix of the debugger and printf's has been what cracked the case.
> Occasionally ignoring the debugger completely and viewing an "event
> stream" of printfs has been the only reasonable way to monitor the
> complex interactions of what is going on.
>
>> FWIW, there is a gdb python API for changing the behavior... so
>> called pretty printers.
>> It is not too difficult to write such pretty-printers.
>
> Some of us don't use gdb. I'm not sure if these work directly in lldb
> or if there is an lldb alternative. But...
>
>> Maybe providing a set of useful pretty-printers is a better approach
>> than providing a set of debug functions?
>
> Having a set of debug-build-only functions is also useful in the
> debugger without having to turn to the pretty-printers.
>
> I don't see how adding printf helpers for debug builds negatively
> affects debugger purists, but I do see how it helps at least a handful
> of prolific contributors to the project be more productive.
>
> Thanks,
> ~Brady
>
>
>
Accepted.
Regards,
Oliver
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20120719/d306d6a0/attachment.html>
More information about the webkit-dev
mailing list