Subject: Re: DPRINTF in ?
To: Iain Hibbert <plunky@rya-online.net>
From: Juan RP <juan@xtrarom.org>
List: tech-kern
Date: 03/16/2007 15:49:07
On Friday 16 March 2007, Iain Hibbert wrote:
> Hi,
>    I thought a while ago that it would be nice to standardize DPRINTF and
> DPRINTFN, and now that we have a <sys/debug.h> I've been pondering how we
> could integrate them, and make it easier to generate debug output. These
> are my thoughts so far:
>
> 1. Add a keyword specification to config(5)
>
> 	debug <attribute> [<level>]
>
>    where <attribute> is the attribute that gets a file included, such as a
>    device name or system module such as "bluetooth", and <level> is the
>    default debug level for that attribute.
>
> 2. config(1) will, when it sees this in a config file, do the following:
>
>   a. add the following to a generated debug.c:
>
> 	int debug_<attribute> = <level?=0>;
> 	sysctl_createv(clog, 0, NULL, NULL,
> 		CTLFLAG_PERMANENT | CTLFLAG_READWRITE,
> 		CTLTYPE_INT, "<attribute>",
> 		SYSCTL_DESCR("<attribute> debug level"),
> 		NULL, 0,
> 		&debug_<attribute>, sizeof(debug_<attribute>),
> 		CTL_DEBUG, CTL_CREATE, CTL_EOL);
>
>   b. add the following (or equivalent?) to the generated Makefile, for
>      files included by the attribute:
>
> 	COPTS.<file>+="-DDEBUG=debug_<attribute>"
>
> 3. <sys/debug.h> contains something like:
>
> 	#ifdef DEBUG
> 	extern int DEBUG;
> 	#define DPRINTF(fmt, args...)	do {			\
> 		if ((DEBUG) > 0)				\
> 			printf("%s: "fmt, __func__ , ##args);	\
> 	} while (/* CONSTCOND */0)
>
> 	#define DPRINTFN(n, fmt, args...)	do {		\
> 		if ((DEBUG) > (n))				\
> 			printf("%s: "fmt, __func__ , ##args);	\
> 	} while (/* CONSTCOND */0)
> 	#else
> 	#define DPRINTF(...)
> 	#define DPRINTFN(...)
> 	#endif
>
> 4. add debug.9 detailing this, and a general guide to how much information
> should be produced for different levels.
>
>
> Potential hurdles that I can think of:
>
> - DEBUG is already a known keyword, I would have to look at how extensive
>   the usage was, maybe this should use DPRINT instead.
>
> - some files are not part of any 'module', so it would be difficult to
>   apply this to them. a magic attribute could solve this, or allow
>   to specify 'debug <file>'
>
> - there could be an issue with debugging colliding attributes, but I'm
>   not sure how much a problem that would be in reality.
>
> is this desireable?
> any other comments before I look at implementation?

That's great!

-- 

http://plog.xtrarom.org/
Juan RP's blog - NetBSD/pkgsrc news in Spanish