debug()
Orion-
thierry.passeron at gmail.com
Wed Feb 27 11:55:54 PST 2008
Bill Baxter Wrote:
> Orion- wrote:
> > Hello people,
> >
> > I'm just starting D programming. I'd like to make a printf like function to print some debuging informations. The synopsis could be dprintf(char[] format, ...) and as an example:
> > dprintf("creating object at %a", self);
> > It would print something like:
> > debug: class1.d(13): creating object at 0XFFB8
> > where class1.d is the __FILE__ name and 13 is the __LINE__ where it was called.
> >
> > So, here are my 2 questions:
> >
> > * How do you know 'self' inside a class member function in D?
> > * How would you do to have __LINE__ being the line where dprintf was called not the line where it is implemented ?
> >
> > Here is my dprintf function so far:
> > void dprintf(...) {
> > TypeInfo[] infos;
> > void *data;
> >
> > void putc(dchar c) { fputc(c, stderr); }
> >
> > Box[] box1 = boxArray("debug: ");
> > Box[] box2 = boxArray(_arguments, cast(void *)_argptr);
> > boxArrayToArguments(box1 ~ box2, infos, data);
> > std.format.doFormat(&putc, infos, cast(char *)data);
> > }
>
> There is a way to get the __LINE__ thing to work automatically, without
> typing __LINE__, but the cure is almost worse than the disease. For
> simplicity I'll just use a non-formatted string to demonstrate.
>
> string dprintf(string msg) {
> return `writefln("%s(%s): ", __FILE__,__LINE__, msg);`;
> }
> ...
> mixin( dprintf("Hey you!"));
>
>
> At least I think that works. I don't use it because I'm not about to go
> around typing mixin everywhere to do debug output. That's the kind of
> thing that should some day be doable with macros, though. Then you'll
> be able to call it without the "mixin" part.
>
> What I actually use is more like what Jason said. debug(ver) {}. I
> don't bother with __FILE__ and __LINE__ stuff.
>
> -----
> module MyModule;
> import std.stdio;
> private{
> debug(MyModule)
> {
> alias writefln debugfln;
> alias writef debugf;
> }
> else {
> void debugfln(...) {}
> void debugf(...) {}
> }
> }
>
> And I hope that the compiler is smart enough to inline an empty
> function. If it's not, I'm getting on the next plane to Seattle to
> whack Walter 50 times with a wet noodle.
>
> --bb
Thanks Bill, do you know of any document explaining the debug() D function ?
Regards, Thierry
More information about the Digitalmars-d
mailing list