SourceFiles.org - Use the Source, Luke
Home | Register | News | Forums | Guide | MyLinks | Bookmark

Related Sites

Latest News
  General News
  Reviews
  Press Releases
  Software
  Hardware
  Security
  Tutorials
  Off Topic


Back to files

Notes about the debug macros and routine:

  1. Source file with main() must #define MAIN_C, no other source files should do so.
  2. The ADM prefix is a leftover from the original program I used this in.
  3. All routines that will use debug macros need to define a character string fname[]. This can be done conditionally, as so
        #ifdef DEBUG
        char    fname[]="Name of Routine";
        #endif

        Do this at the start of each routine.  The scope of fname is local to
        the routine.

4. There are 6 macros:

        DBGOpen(fd) - opens the debug output file
        DBGClose(fd) - closes the debug output file
        DBGEnter() - prints a message that a routine has been entered
        DBGExit() - prints a message that a routine is being exited
        DBGPrint(level, A) - prints A, which should be a character string
        DBGPrintf(level, A) - prints A, which is a varargs format string just
                like printf() would use.

        Both DBGPrint() and DBGPrintf() use "level", which can be used to set
        different levels of debug output.  This isn't implemented all that well.
        The debug level should be set via command line args, but doing so is not
        part of the debug macros.  It does work well when you only want to debug

certain parts (as opposed to different levels). If anyone wants to add levels to debug.h, please let me know so I can track them.

Example use of DBGPrint() and DBGPrintf():

        DBGPrint(DBG_INFO, "testing debug\n");
        DBGPrintf(DBG_INFO, ("testing debug: my name=%s\n", (char *)name));

        Note that the latter's second argument must be enclosed in
        parenthesis!  Also, the strings must use the same syntax as printf()
        for DBGPrintf().  DBGPrint() just prints the strings, so you can't use
        it to print variable arguments.  You'll find you use DBGPrintf() much
        more than DBGPrint().

        DBGEnter() and DBGExit() require not arguments.

5. There are 4 globally set variables:

        int     GMDebugLevel - this can be DBG_PROC, DBG_INFO, DBG_SPECIAL, etc.
                        see debug.h
        char    *DBGFile - the name of the debug output file
        char    *DBGbuf - points to the character string created from varargs list
        int     DEBUG_FD - file descriptor for open debug output file

        You must call DBGOpen() with DEBUG_FD, as 
                DBGOpen(DEBUG_FD);
        The same is true of DBGClose().
        
        The default value for DBGFile is "/dev/null".

How To Use libgmdebug.a:

  1. Add the following line to the module where your main() is located:

    #define MAIN_C

  2. Add the following to your main():

char *fname="main()";

        GMDebugLevel = DBG_ALL;
        DBGFile = "/tmp/debug.out";
        DBGOpen(DEBUG_FD);
        DBGEnter();

        This will tell the library that all possible debug output should be 
        displayed and to send that output to /tmp/debug.out.  You can use
        the convenience routine, DBGStringToInt(), to convert a hex string
        to an integer value if you'd like.  That way, you can just specify
        a hex value on the command line, pass it to DBGStringToInt(), and 
        set the returned value to GMDebugLevel.

3. Include the following to you source where you want to use the debug library.

#include "debug.h"

4. Add the fname variable to any routine that will be using the debug

library.

5. Add the DBGEnter(), DBGExit(), DBGPrint() and DBGPrintf() to your routines.

6. Debug till your heart is content.

These macros are actually a hybrid from the macros used on a project at IBM and ones used on an Interactive TV project for GTE. This little library has grown tremendously since I first created it. Its now ready for use in any project you'd like to drop it into!


Other Sites

Discussion Groups
  Beginners
  Distributions
  Networking / Security
  Software
  PDAs

About | FAQ | Privacy | Awards | Contact
Comments to the webmaster are welcome.
Copyright 2006 Sourcefiles.org All rights reserved.