windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/afsvcloc/debug.c

209 lines
3.8 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
debug.c
Abstract:
Contains debug functions.
Author:
Madan Appiah (madana) 15-Nov-1994
Environment:
User Mode - Win32
Revision History:
--*/
#if DBG
#include <windows.h>
#include <winnt.h>
#include <stdlib.h>
#include <stdio.h>
#include <debug.h>
DWORD GlobalDebugFlag = 0;
CRITICAL_SECTION GlobalDebugCritSect;
VOID
TcpsvcsDbgPrintRoutine(
IN DWORD DebugFlag,
IN LPSTR Format,
...
)
{
#define MAX_PRINTF_LEN 1024 // Arbitrary.
va_list arglist;
char OutputBuffer[MAX_PRINTF_LEN];
ULONG length;
static BeginningOfLine = TRUE;
LPSTR Text;
//
// If we aren't debugging this functionality, just return.
//
if ( DebugFlag != 0 && (GlobalDebugFlag & DebugFlag) == 0 ) {
return;
}
length = 0;
//
// Handle the beginning of a new line.
//
//
if ( BeginningOfLine ) {
length += (ULONG) sprintf( &OutputBuffer[length], "[Cache] "
);
//
// Put the timestamp at the begining of the line.
//
IF_DEBUG( TIMESTAMP ) {
SYSTEMTIME SystemTime;
GetLocalTime( &SystemTime );
length += (ULONG) sprintf( &OutputBuffer[length],
"%02u/%02u %02u:%02u:%02u ",
SystemTime.wMonth,
SystemTime.wDay,
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond );
}
//
// Indicate the type of message on the line
//
switch (DebugFlag) {
case DEBUG_ERRORS:
Text = "ERROR";
break;
case DEBUG_REGISTRY:
Text = "LEASE";
break;
case DEBUG_MISC:
Text = "MISC";
break;
case DEBUG_SCAVENGER:
Text = "SCAVENGER";
break;
case DEBUG_SORT:
Text = "SORT";
break;
case DEBUG_CONTAINER:
Text = "CONTAINER";
break;
case DEBUG_APIS:
Text = "APIS";
break;
case DEBUG_FILE_VALIDATE:
Text = "FILE_VALIDATE";
break;
case DEBUG_MEM_ALLOC:
Text = "MEM_ALLOC";
break;
default:
Text = NULL;
break;
}
if ( Text != NULL ) {
length += (ULONG) sprintf( &OutputBuffer[length], "[%s] ", Text );
}
}
//
// Put a the information requested by the caller onto the line
//
//
// vsprintf isn't multithreaded + we don't want to intermingle output
// from different threads.
//
EnterCriticalSection( &GlobalDebugCritSect );
va_start(arglist, Format);
length += (ULONG) vsprintf(&OutputBuffer[length], Format, arglist);
BeginningOfLine = (length > 0 && OutputBuffer[length-1] == '\n' );
va_end(arglist);
TcpsvcsDbgAssert(length <= MAX_PRINTF_LEN);
//
// Output to the debug terminal,
//
(void) DEBUG_PRINT( (PCH) OutputBuffer);
LeaveCriticalSection( &GlobalDebugCritSect );
}
VOID
TcpsvcsDbgAssertFailed(
LPSTR FailedAssertion,
LPSTR FileName,
DWORD LineNumber,
LPSTR Message
)
/*++
Routine Description:
Assertion failed.
Arguments:
FailedAssertion :
FileName :
LineNumber :
Message :
Return Value:
none.
--*/
{
TcpsvcsDbgPrint(( 0, "Assert @ %s \n", FailedAssertion ));
TcpsvcsDbgPrint(( 0, "Assert Filename, %s \n", FileName ));
TcpsvcsDbgPrint(( 0, "Line Num. = %ld.\n", LineNumber ));
TcpsvcsDbgPrint(( 0, "Message is %s\n", Message ));
DebugBreak();
}
#endif // DBG