On Jul 10, 2012, at 8:52 AM, Brady Eidson <beid...@apple.com> wrote:
> > On Jul 10, 2012, at 5:25 AM, Alexis Menard <alexis.men...@openbossa.org> > wrote: > >> On Mon, Jul 9, 2012 at 6:53 PM, Brady Eidson <beid...@apple.com> wrote: >>> >>> On Jul 9, 2012, at 2:43 PM, Alexis Menard <alexis.men...@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. In principle, we could also have this support multiple arguments, so you could write: debug("frame: ", someFrame, " node: ", someNode, " string", someString); This would be no more verbose than the << style, but could compile to a single function call at the call site and therefore could be relatively compact. I would find this easier to deal with than a unary function or a printf-style format string. The way you'd do this is by defining template functions which call a unary overloaded function for each argument: template<typename A, typename B> debug(A a, B b) { debug(a); debug(b); } template<typename A, typename B, typename C> debug(A a, B b, C c) { debug(a); debug(b); debug(c); } template<typename A, typename B, typename C, typename D> debug(A a, B b, C c, D d) { debug(a); debug(b); debug(c); debug(d); } ... and so on up to some reasonable number of arguments. Regards, Maciej _______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev