/*++ Copyright (c) 1999 Microsoft Corporation Module Name: debug.h Abstract: This file contains debugging macros for the webdav client. Author: Andy Herron (andyhe) 30-Mar-1999 Environment: User Mode - Win32 Revision History: --*/ #ifndef DAV_DEBUG_H #define DAV_DEBUG_H #if DBG // // Memory allocation and tracking // #define DEBUG_OUTPUT_BUFFER_SIZE 1024 typedef struct _MEMORYBLOCK { HLOCAL hlocal; DWORD dwBytes; UINT uFlags; LPCSTR pszFile; UINT uLine; LPCSTR pszModule; LPCSTR pszComment; struct _MEMORYBLOCK *pNext; } MEMORYBLOCK, *LPMEMORYBLOCK; #define DEFAULT_MAXIMUM_DEBUGFILE_SIZE (1024 * 1024) // // Controls access to the memeory tracing routines. We need this since multiple // threads could be allocating memory simultaneously. // EXTERN CRITICAL_SECTION g_TraceMemoryCS; // // List of memory blocks (see the structure defined above) being maintained for // tracking memory. // EXTERN LPVOID g_TraceMemoryTable INIT_GLOBAL(NULL); // // Controls access to the debug log file. We need this since multiple threads // could be writing to it simultaneously. // EXTERN CRITICAL_SECTION DavGlobalDebugFileCritSect; // // These are used in persistent logging. They define the file handle of the // file to which the debug o/p is written, the max file size and the path // of the file. // EXTERN HANDLE DavGlobalDebugFileHandle INIT_GLOBAL(INVALID_HANDLE_VALUE); EXTERN ULONG DavGlobalDebugFileMaxSize INIT_GLOBAL(DEFAULT_MAXIMUM_DEBUGFILE_SIZE); EXTERN LPWSTR DavGlobalDebugSharePath; // // This flag (value) is used in filtering/controlling the debug messages. // EXTERN ULONG DavGlobalDebugFlag; #define DEBUG_DIR L"\\debug" #define DEBUG_FILE L"\\davclnt.log" #define DEBUG_BAK_FILE L"\\davclnt.bak" HLOCAL DebugAlloc( LPCSTR pszFile, UINT uLine, LPCSTR pszModule, UINT uFlags, DWORD dwBytes, LPCSTR pszComment ); #define DavAllocateMemory(x) ( \ DebugAlloc(__FILE__, \ __LINE__, \ "DAV", \ LMEM_FIXED | LMEM_ZEROINIT, \ x, \ #x) \ ) HLOCAL DebugFree( HLOCAL hglobal ); #define DavFreeMemory(x) DebugFree(x) VOID DebugInitialize( VOID ); VOID DebugUninitialize( VOID ); VOID DavAssertFailed( LPSTR FailedAssertion, LPSTR FileName, DWORD LineNumber, LPSTR Message ); #define DavAssert(Predicate) { \ if (!(Predicate)) { \ DavAssertFailed( #Predicate, __FILE__, __LINE__, NULL ); \ } \ } #define DavAssertMsg(Predicate, Message) { \ if (!(Predicate)) { \ DavAssertFailed( #Predicate, __FILE__, __LINE__, #Message ); \ } \ } #define IF_DEBUG(flag) if (DavGlobalDebugFlag & (DEBUG_ ## flag)) // // The debug flags used. // #define DEBUG_CONNECT 0x00000001 // connect events #define DEBUG_ERRORS 0x00000002 // errors #define DEBUG_INIT 0x00000004 // init events #define DEBUG_SCAVENGER 0x00000008 // sacvenger error #define DEBUG_REGISTRY 0x00000010 // Registry operation #define DEBUG_MISC 0x00000020 // misc info. #define DEBUG_RPC 0x00000040 // debug rpc messages #define DEBUG_MEMORY 0x00000080 // Memory Allocation Tracking Spew #define DEBUG_FUNC 0x00000100 // function entry/exit #define DEBUG_STARTUP_BRK 0x00000200 // breakin debugger during startup. #define DEBUG_LOG_IN_FILE 0x00000400 // log debug output in a file. #define DEBUG_DEBUG 0x00000800 // scope the debugging VOID DavPrintRoutine( IN DWORD DebugFlag, IN LPSTR Format, ... ); #define DavPrint(_x_) DavPrintRoutine _x_; VOID DebugMemoryCheck( VOID ); #else // not DBG #define DavAllocateMemory(x) LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT, x) #define DavFreeMemory(x) LocalFree(x) #define IF_DEBUG(flag) if (FALSE) #define DavPrint(_x_) #define DavAssert(_x_) #define DavAssertMsg(_x_, _y_) #endif // DBG VOID DavClientEventLog( DWORD EventID, DWORD EventType, DWORD ErrorCode ); #endif // DAV_DEBUG_H