DEBUG.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:
Windows编程
开发平台:
Visual C++
- /******************************************************************************
- * This is a part of the Microsoft Source Code Samples.
- * Copyright (C) 1992-1997 Microsoft Corporation.
- * All rights reserved.
- * This source code is only intended as a supplement to
- * Microsoft Development Tools and/or WinHelp documentation.
- * See these sources for detailed information regarding the
- * Microsoft samples programs.
- ******************************************************************************/
- //+---------------------------------------------------------------------------
- //
- // File: debug.c
- //
- // Contents: Debugging support functions
- //
- // Classes:
- //
- // Functions:
- //
- // Note: This file is not compiled for retail builds
- //
- //----------------------------------------------------------------------------
- #include "pop3srvp.h"
- #pragma hdrstop
- #if DBG // NOTE: This file not compiled for retail builds
- FILE * LogFile;
- DWORD PopInfoLevel = 15;
- // Debugging support functions.
- char * DebLevel[] = { "Pop3Srv-Error",
- "Pop3Srv-Warn",
- "Pop3Srv-Trace",
- "Pop3Srv-Trace-Protocol"
- };
- typedef struct _DebugKeys {
- char * Name;
- DWORD Value;
- } DebugKeys, *PDebugKeys;
- DebugKeys DebugKeyNames[] = {
- {"Error", DEB_ERROR},
- {"Warning", DEB_WARN},
- {"Trace", DEB_TRACE},
- {"Pool", DEB_TRACE_PROT},
- };
- #define NUM_DEBUG_KEYS sizeof(DebugKeyNames) / sizeof(DebugKeys)
- #define NUM_BREAK_KEYS sizeof(BreakKeyNames) / sizeof(DebugKeys)
- //+---------------------------------------------------------------------------
- //
- // Function: LogEvent
- //
- // Synopsis: Logs an event to the console and, optionally, a file.
- //
- // Effects:
- //
- // Arguments: [Mask] --
- // [Format] --
- // [Format] --
- //
- // Requires:
- //
- // Returns:
- //
- // Signals:
- //
- // Modifies:
- //
- // Algorithm:
- //
- // History: 4-29-93 RichardW Created
- //
- // Notes:
- //
- //----------------------------------------------------------------------------
- void
- LogEvent( long Mask,
- const char * Format,
- ...)
- {
- va_list ArgList;
- int Level = 0;
- int PrefixSize = 0;
- char szOutString[256];
- long OriWinlogonlMask = Mask;
- if (Mask & PopInfoLevel)
- {
- while (!(Mask & 1))
- {
- Level++;
- Mask >>= 1;
- }
- if (Level >= (sizeof(DebLevel) / sizeof(char *)) )
- {
- Level = (sizeof(DebLevel) / sizeof(char *)) - 1;
- }
- //
- // Make the prefix first: "Process.Thread> Pop3Svr-XXX"
- //
- PrefixSize = sprintf(szOutString, "%d.%d> %s: ",
- GetCurrentProcessId(), GetCurrentThreadId(), DebLevel[Level]);
- va_start(ArgList, Format);
- if (_vsnprintf(&szOutString[PrefixSize], sizeof(szOutString) - PrefixSize,
- Format, ArgList) < 0)
- {
- //
- // Less than zero indicates that the string could not be
- // fitted into the buffer. Output a special message indicating
- // that:
- //
- OutputDebugStringA("Pop3Svr!LogEvent: Could not pack string into 256 bytesn");
- }
- else
- {
- OutputDebugStringA(szOutString);
- }
- if (LogFile)
- {
- SYSTEMTIME stTime;
- GetLocalTime(&stTime);
- fprintf(LogFile, "%02d:%02d:%02d.%03d: %sn",
- stTime.wHour, stTime.wMinute, stTime.wSecond,
- stTime.wMilliseconds, szOutString);
- fflush(LogFile);
- }
- }
- }
- void
- DebugOpenLogFile(LPSTR pszLogFile)
- {
- LogFile = fopen(pszLogFile, "a");
- if (!LogFile)
- {
- OutputDebugStringA("Pop3Svr: Could not open logfile for append");
- OutputDebugStringA(pszLogFile);
- }
- DebugLog((DEB_TRACE, "Log file '%s' beginsn", pszLogFile));
- }
- DWORD
- GetDebugKeyValue(
- PDebugKeys KeyTable,
- int cKeys,
- LPSTR pszKey)
- {
- int i;
- for (i = 0; i < cKeys ; i++ )
- {
- if (_stricmp(KeyTable[i].Name, pszKey) == 0)
- {
- return(KeyTable[i].Value);
- }
- }
- return(0);
- }
- //+---------------------------------------------------------------------------
- //
- // Function: LoadDebugParameters
- //
- // Synopsis: Loads debug parameters from win.ini
- //
- // Effects:
- //
- // Arguments: (none)
- //
- // Requires:
- //
- // Returns:
- //
- // Signals:
- //
- // Modifies:
- //
- // Algorithm:
- //
- // History: 4-29-93 RichardW Created
- //
- // Notes:
- //
- //----------------------------------------------------------------------------
- void
- LoadDebugParameters(char * szSection)
- {
- char szVal[128];
- char * pszDebug;
- int cbVal;
- cbVal = GetProfileStringA(szSection, "DebugFlags", "Error,Warning", szVal, sizeof(szVal));
- pszDebug = strtok(szVal, ", t");
- while (pszDebug)
- {
- PopInfoLevel |= GetDebugKeyValue(DebugKeyNames, NUM_DEBUG_KEYS, pszDebug);
- pszDebug = strtok(NULL, ", t");
- }
- cbVal = GetProfileStringA(szSection, "LogFile", "", szVal, sizeof(szVal));
- if (cbVal)
- {
- DebugOpenLogFile(szVal);
- }
- }
- //+---------------------------------------------------------------------------
- //
- // Function: InitDebugSupport
- //
- // Synopsis: Initializes debugging support for the Winlogon
- //
- // Effects:
- //
- // Arguments: (none)
- //
- // Requires:
- //
- // Returns:
- //
- // Signals:
- //
- // Modifies:
- //
- // Algorithm:
- //
- // History: 4-29-93 RichardW Created
- //
- // Notes:
- //
- //----------------------------------------------------------------------------
- void
- InitDebugSupport(void)
- {
- LoadDebugParameters("Pop");
- LoadDebugParameters("Winlogon");
- }
- #else // DBG
- #pragma warning(disable:4206) // Disable the empty transation unit
- // warning/error
- #endif // NOTE: This file not compiled for retail builds