/*++ Copyright (c) 2000 Microsoft Corporation Module Name: sldebug.h Abstract: Debugging functions exported from the storlib library. Author: Matthew D Hendel (math) 24-Apr-2000 Revision History: --*/ #pragma once #undef ASSERT #undef VERIFY #undef ASSERTMSG #undef KdBreakPoint #undef DebugPrint #if !DBG #define DebugTrace(arg) #define DebugPrint(arg) #define DebugWarn(arg) #define ASSERT(arg) #define VERIFY(arg) (arg) #define ASSERTMSG(arg) #define KdBreakPoint() #define StorSetDebugPrefixAndId(Prefix,ComponentId) #define NYI() #define REVIEW() // // DbgFillMemory does nothing // in a free build. // #define DbgFillMemory(Ptr,Size,Fill) #else // DBG VOID vStorDebugPrintEx( IN ULONG Level, IN PCSTR Format, va_list arglist ); VOID StorDebugTrace( IN PCSTR Format, ... ); VOID StorDebugWarn( IN PCSTR Format, ... ); VOID StorDebugPrint( IN PCSTR Format, ... ); VOID StorSetDebugPrefixAndId( IN PCSTR Prefix, IN ULONG DebugId ); #define DebugTrace(arg) StorDebugTrace arg #define DebugWarn(arg) StorDebugWarn arg #define DebugPrint(arg) StorDebugPrint arg // // On X86 use _asm int 3 instead of DbgBreakPoint because // it leaves us in same context frame as the break, // instead of a frame up that we have to step out of. // #if defined (_X86_) #define KdBreakPoint() _asm { int 3 } #else #define KdBreakPoint() DbgBreakPoint() #endif //++ // // VOID // DbgFillMemory( // PVOID Destination, // SIZE_T Length, // UCHAR Fill // ); // // Routine Description: // // In a checked build, DbgFillMemory expands to RtlFillMemory. In a free // build, it expands to nothing. Use DbgFillMemory to initialize structures // to invalid bit patterns before deallocating them. // // Return Value: // // None. // //-- VOID INLINE DbgFillMemory( PVOID Destination, SIZE_T Length, UCHAR Fill ) { RtlFillMemory (Destination, Length, Fill); } // // Use a different ASSERT macro than the vanilla DDK ASSERT. // BOOLEAN StorAssertHelper( PCHAR Expression, PCHAR File, ULONG Line, PBOOLEAN Ignore ); //++ // // VOID // ASSERT( // LOGICAL Expression // ); // // Routine Description: // // The ASSERT improves upon the DDK's ASSERT macro in several ways. // In source mode, it breaks directly on the line where the assert // failed, instead of several frames up. Additionally, there is a // way to repeatedly ignore the assert. // // Return Value: // // None. // //-- #define ASSERT(exp)\ do { \ static BOOLEAN Ignore = FALSE; \ \ if (!(exp)) { \ BOOLEAN Break; \ Break = StorAssertHelper (#exp, __FILE__, __LINE__, &Ignore); \ if (!Ignore && Break) { \ KdBreakPoint(); \ } \ } \ } while (0) #define VERIFY(_x) ASSERT(_x) #define NYI() ASSERT (!"NYI") #define REVIEW()\ {\ DebugPrint (("***** REVIEW: This code needs to be reviewed." \ " Source File %s, line %ld\n", \ __FILE__, __LINE__)); \ KdBreakPoint(); \ } #define DBG_DEALLOCATED_FILL (0xDE) #define DBG_UNINITIALIZED_FILL (0xCE) #endif // DBG