DebugMessages


I use this trick a lot to see how many times a function is called or what section of code a segmentation fault came from.  The useful part about this trick is that once all the messages are in the code, them being compiled into the program is optional.

 

Code:

#ifdef DEBUG

#define ErR(a) fprintf(stderr, "%s\n", a)

#else

#define ErR(a) NULL

#endif

 

Usage:

// hello.c

main() {

     ErR("Beginning of main");

     printf("Hello World!\n");

     ErR("End of main");

}

 

Compile with:

cc -o hello hello.c -DDEBUG

The -D flag defines the symbol after it, so ErR gets replaced with fprintf only if DEBUG is defined, otherwise it disappears.

 


Extensions:

If the debug messages are going by too fast, you can add in a second clause for DEBUG_SLOW being defined to pause 1 seconds after each message

#if defined DEBUG

#define ErR(a) fprintf(stderr, "%s\n", a)

#elif defined DEBUG_SLOW

#define ErR(a) fprintf(stderr, "%s\n", a); sleep(1)

#else

#define ErR(a) NULL

#endif

 

If you want something more general than just printing messages, you can instead do:

#ifdef DEBUG

#define IF_DEBUG(a) (a)

#else

#define IF_DEBUG(a) NULL

#endif

 

For a very good outline on how to have the program also display which file and which line in the file the message was from, read this article.


Sources:

http://kennethfinnegan.blogspot.com/2008/03/debugging-messages-in-c.html

http://www.gnu.org/software/wget/

http://www.decompile.com/cpp/faq/file_and_line_error_string.htm