home *** CD-ROM | disk | FTP | other *** search
- From: travis@cs.columbia.edu (Travis Lee Winfrey)
- Newsgroups: comp.lang.c,comp.unix.wizards,alt.sources,comp.sources.d,misc.misc
- Subject: Re: #define DEBUG... (using printf for debugging)
- Message-ID: <1990May4.161910.1353@cs.columbia.edu>
- Date: 4 May 90 16:19:10 GMT
-
- In article <40628@cornell.UUCP>,
- >gordon@mimir.cs.cornell.edu (Jeffrey Adam Gordon) writes:
- >
- > I want to have a DEBUG flag which controls whether diagnostic printfs
- > are executed or not.
-
- Well, another variation on the debug macro with two parentheses
- is to have a first argument that specifies the current level of
- interest. This argument can be compared with whatever you need: a
- module-specific #define, a module-specific variable, a global
- variable. The two biggest problems with this method are the complaints
- from lint about constants appearing in an if-statement, and that some
- compilers may not strip out the code when you don't want the output.
-
- A sample follow. Note that the numbers here range from 1 to 4 because
- I define DEBUG on a per-module basis. Some other people specify their
- interest in debugging information in terms of percentages, i.e., show
- me 50% of everything you have in this module. that's not intuitive
- for me.
-
- (I'm sorry if anyone else has already described this particular
- fillip; I looked through all the messages posted so far, as many of
- the previous posters should have done.)
-
- /*
- * debugging macros. the dprintf macro takes two arguments, a
- * debugging level (1, 2, 3, 4) and a list of ordinary printf
- * arguments in parentheses, e.g.,
- * dprintf(1, ("proc_kill_module: sys_ptr is NULL!\n"));
- *
- * debugging levels:
- * level 1: ordinary unexpected events which the programmer may want
- * to know, but a user will not. all "oh no!" type
- * information should be marked with this.
- * level 2: more detailed, usually per-module information that
- * will a programmer will not want to know *unless* he or
- * she is debugging that module.
- * Level 3: more detailed than 2, usually per-procedure
- * debugging information. debugging statements this
- * low-level will be removed once gross errors are
- * found and removed.
- * Level 4: just a level for demarcating extremely low-level,
- * usually inner-loop information. removed as level 3 messages.
- *
- */
- # ifdef DEBUG
- # define dprintf(dlevel,printfargs) if (dlevel <= DEBUG ) \
- printf printfargs
- # else /* DEBUG */
- # define dprintf(a,b)
- # endif /* DEBUG */
- --
-
- Arpa: travis@cs.columbia.edu Usenet: rutgers!columbia!travis
-