debug.h

Go to the documentation of this file.
00001 
00007 #ifndef DEBUG_H
00008 #define DEBUG_H
00009 
00010 #ifndef PP_H
00011 #include "pp.h"
00012 #endif
00013 #include <stdarg.h>
00014 
00015 #ifdef MSVC
00016 
00023 #define ppFileLine(txt)     __FILE__ "(" ppTokStr(__LINE__) ") : " txt
00024 #else
00025 
00029 #define ppFileLine(txt)     __FILE__ ":" ppTokStr(__LINE__) ": " txt
00030 #endif
00031 
00032 
00033 /* Some conditional macros for release versus debug mode */
00034 #ifdef NDEBUG
00035 
00038 #define ppRelease(v)        v
00039 
00042 #define ppDebug(v)
00043 
00046 #define ppReleaseParam(v)   , v
00047 
00050 #define ppDebugParam(v)
00051 
00054 #define ppDebRel(deb,rel)   rel
00055 
00056 #else
00057 
00058 #define ppRelease(v)        
00059 #define ppDebug(v)          v
00060 #define ppReleaseParam(v)
00061 #define ppDebugParam(v)     , v
00062 #define ppDebRel(deb,rel)   deb
00063 
00064 #endif /*NDEBUG*/
00065 
00066 #ifndef throwassert /* Allow throwassert to be replaced by predefining it */
00067 
00076 #ifdef _MSC_VER /* Microsoft's inline assembly */
00077 #define throwassert(sz)     ppDebug( { trace(( "%s\n", ppFileLine(sz) )); __asm { int 3 } } )
00078 #else   /* GNU's inline assembly */
00079 #define throwassert(sz)     ppDebug( { trace(( "%s\n", ppFileLine(sz) )); __asm__("int3"); } ) /*assert(false) */
00080 #endif
00081 #endif
00082 
00085 #ifndef isdebugger  /* Allow isdebugger to be replaced by predefining it */
00086 #define isdebugging()       ppDebug( _isdebugging() )
00087 #endif 
00088 #ifndef assert      /* Allow assert to be replaced by predefining it */
00089 
00093 #define assert(e)           ppDebug( { if( !(e) ) throwassert(#e); } )
00094 #endif
00095 #ifndef assertptr   /* Allow assertptr to be replaced by predefining it */
00096 
00100 #define assertptr(p,len)    assert( _checkptr((p),(len),1) )
00101 #endif
00102 #ifndef assertconst
00103 
00107 #define assertconst(p,len)  assert( _checkconst((p),(len),1) )
00108 #endif
00109 #ifndef assertobjptr    /* Allow assertptr to be replaced by predefining it */
00110 
00114 #define assertobjptr(p)     assert( _checkptr((p),sizeof(*(p)),min(4,sizeof(*(p)))) )
00115 #endif
00116 #ifndef assertcodeptr   /* Allow assertptr to be replaced by predefining it */
00117 
00121 #define assertobjconst(p)   assert( _checkconst((p),sizeof(*(p)),min(4,sizeof(*(p)))) )
00122 #endif
00123 #ifndef assertcodeptr   /* Allow assertptr to be replaced by predefining it */
00124 
00128 #define assertcodeptr(p)    assert( _checkcall( p ) )
00129 #endif
00130 
00131 #ifndef trace
00132 
00136 #define trace(args)     ppDebug( debug_trace args )
00137 #endif
00138 #ifndef traceline
00139 
00143 #define traceline(args) ppDebug( { debug_trace("%s\n", ppFileLine(ppNULL) ); debug_trace args; } )
00144 #endif 
00145 
00146 
00147 ppCPP(extern "C" {)
00148 
00155 typedef int (*debug_vlog_t)( const char*, va_list );
00156 void debug_setvlog( debug_vlog_t debug_vlog );
00157 void debug_setlogmask( unsigned mask );
00158 unsigned debug_getlogmask(void);
00159 void debug_log( unsigned mask, const char* fmt, ... );
00160 void debug_vlog( unsigned mask, const char* fmt, va_list args );
00161 void debug_logalways(const char* fmt, ... );
00162 void debug_vlogalways(const char* fmt, va_list args );
00163 #define LOG debug_log
00164 void debug_loghex( unsigned mask, const void* ptr, size_t size );
00165 #define LOG_ERROR       0
00166 #define LOG_STARTUP     1
00167 #define LOG_WARNING     2
00168 #define LOG_SECURITY    4
00169 #define LOG_INFO        8
00170 #define LOG_PROFILE     16
00171 
00172 #ifdef NDEBUG
00173 #define debug_settrace(fp)
00174 #else /*NDEBUG*/
00175 
00178 typedef int (*debug_trace_t)(const char*,...);
00179 void debug_settrace( debug_trace_t trace );
00180 #ifndef DEBUG_C
00181 extern const debug_trace_t debug_trace;
00182 #endif
00183 /* Little helper functions to keep OS dependent junk out of most of the code */
00184 int _checkptr( void* p, size_t len, size_t align );
00185 int _checkconst( const void* p, size_t len, size_t align );
00186 int _checkcall( const void* p );
00187 int _isdebugging(void);
00188 #endif /*NDEBUG*/
00189 
00190 ppCPP(})
00191 
00192 
00193 #endif /* DEBUG_H */

Generated on Fri Jan 2 15:28:34 2009 for Squat by  doxygen 1.5.6