DEBUG.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:
Windows编程
开发平台:
Visual C++
- //+---------------------------------------------------------------------------
- //
- // Microsoft Windows
- // Copyright 1992 - 1997 Microsoft Corporation.
- //
- // File: debug.c
- //
- // Contents: Debugging support functions
- //
- // Classes:
- //
- // Functions:
- //
- // Note: This file is not compiled for retail builds
- //
- // History: 4-29-93 RichardW Created
- //
- //----------------------------------------------------------------------------
- //
- // For ease of debugging the SPMgr, all the debug support functions have
- // been stuck here. Basically, we read info from win.ini, since that allows
- // us to configure the debug level via a text file (and DOS, for example).
- //
- // Format is:
- //
- // win.ini
- //
- // [Gina]
- // DebugFlags=<Flag>[<,Flag>]*
- //
- // WHERE:
- // Flag is one of the following:
- // Error, Warning, Trace
- //
- #if DBG // NOTE: This file not compiled for retail builds
- #include "gina.h"
- #include <stdio.h>
- #include <wchar.h>
- FILE * LogFile;
- DWORD GINAInfoLevel = 3;
- // Debugging support functions.
- // These two functions do not exist in Non-Debug builds. They are wrappers
- // to the commnot functions (maybe I should get rid of that as well...)
- // that echo the message to a log file.
- char szSection[] = "Gina";
- char * DebLevel[] = {"GINA-Error", "GINA-Warn", "GINA-Trace"
- };
- typedef struct _DebugKeys {
- char * Name;
- DWORD Value;
- } DebugKeys, *PDebugKeys;
- DebugKeys DebugKeyNames[] = {
- {"Error", DEB_ERROR},
- {"Warning", DEB_WARN},
- {"Trace", DEB_TRACE},
- };
- #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 OriginalMask = Mask;
- if (Mask & GINAInfoLevel)
- {
- while (!(Mask & 1))
- {
- Level++;
- Mask >>= 1;
- }
- if (Level >= (sizeof(DebLevel) / sizeof(char *)) )
- {
- Level = (sizeof(DebLevel) / sizeof(char *)) - 1;
- }
- //
- // Make the prefix first: "Process.Thread> GINA-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("GINA!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
- OpenLogFile(LPSTR pszLogFile)
- {
- LogFile = fopen(pszLogFile, "a");
- if (!LogFile)
- {
- OutputDebugStringA("GINA: 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 (strcmpi(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(void)
- {
- char szVal[128];
- char * pszDebug;
- int cbVal;
- cbVal = GetProfileStringA(szSection, "DebugFlags", "Error,Warning", szVal, sizeof(szVal));
- pszDebug = strtok(szVal, ", t");
- while (pszDebug)
- {
- GINAInfoLevel |= GetDebugKeyValue(DebugKeyNames, NUM_DEBUG_KEYS, pszDebug);
- pszDebug = strtok(NULL, ", t");
- }
- cbVal = GetProfileStringA(szSection, "LogFile", "", szVal, sizeof(szVal));
- if (cbVal)
- {
- OpenLogFile(szVal);
- }
- }
- //+---------------------------------------------------------------------------
- //
- // Function: InitDebugSupport
- //
- // Synopsis: Initializes debugging support for the GINAgr
- //
- // Effects:
- //
- // Arguments: (none)
- //
- // Requires:
- //
- // Returns:
- //
- // Signals:
- //
- // Modifies:
- //
- // Algorithm:
- //
- // History: 4-29-93 RichardW Created
- //
- // Notes:
- //
- //----------------------------------------------------------------------------
- void
- InitDebugSupport(void)
- {
- LoadDebugParameters();
- }
- #else // DBG
- #pragma warning(disable:4206) // Disable the empty transation unit
- // warning/error
- #endif // NOTE: This file not compiled for retail builds