DEBUG.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:
Windows编程
开发平台:
Visual C++
- //==========================================================================;
- //
- // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- // PURPOSE.
- //
- // Copyright (C) 1992 - 1997 Microsoft Corporation. All Rights Reserved.
- //
- //--------------------------------------------------------------------------;
- //
- // debug.c
- //
- // Description:
- // This file contains code yanked from several places to provide debug
- // support that works in win 16 and win 32.
- //
- //
- //==========================================================================;
- #ifdef DEBUG
- #include <windows.h>
- #include <windowsx.h>
- #include <mmsystem.h>
- #include <stdarg.h>
- #include "debug.h"
- BOOL __gfDbgEnabled = TRUE; // master enable
- UINT __guDbgLevel = 0; // current debug level
- //--------------------------------------------------------------------------;
- //
- // void DbgVPrintF
- //
- // Description:
- //
- //
- // Arguments:
- // LPSTR szFormat:
- //
- // va_list va:
- //
- // Return (void):
- // No value is returned.
- //
- //--------------------------------------------------------------------------;
- void FAR CDECL DbgVPrintF
- (
- LPSTR szFormat,
- va_list va
- )
- {
- char ach[DEBUG_MAX_LINE_LEN];
- BOOL fDebugBreak = FALSE;
- BOOL fPrefix = TRUE;
- BOOL fCRLF = TRUE;
- ach[0] = ' ';
- for (;;)
- {
- switch (*szFormat)
- {
- case '!':
- fDebugBreak = TRUE;
- szFormat++;
- continue;
- case '`':
- fPrefix = FALSE;
- szFormat++;
- continue;
- case '~':
- fCRLF = FALSE;
- szFormat++;
- continue;
- }
- break;
- }
- if (fDebugBreak)
- {
- ach[0] = ' 07';
- ach[1] = ' ';
- }
- if (fPrefix)
- {
- lstrcatA(ach, DEBUG_MODULE_NAME ": ");
- }
- wvsprintfA(ach + lstrlenA(ach), szFormat, va);
- if (fCRLF)
- {
- lstrcatA(ach, "rn");
- }
- OutputDebugStringA(ach);
- if (fDebugBreak)
- {
- DebugBreak();
- }
- } // DbgVPrintF()
- //--------------------------------------------------------------------------;
- //
- // void dprintf
- //
- // Description:
- // dprintf() is called by the DPF() macro if DEBUG is defined at compile
- // time. It is recommended that you only use the DPF() macro to call
- // this function--so you don't have to put #ifdef DEBUG around all
- // of your code.
- //
- // Arguments:
- // UINT uDbgLevel:
- //
- // LPSTR szFormat:
- //
- // Return (void):
- // No value is returned.
- //
- //--------------------------------------------------------------------------;
- void FAR CDECL dprintf
- (
- UINT uDbgLevel,
- LPSTR szFormat,
- ...
- )
- {
- va_list va;
- if (!__gfDbgEnabled || (__guDbgLevel < uDbgLevel))
- return;
- va_start(va, szFormat);
- DbgVPrintF(szFormat, va);
- va_end(va);
- } // dprintf()
- //--------------------------------------------------------------------------;
- //
- // BOOL DbgEnable
- //
- // Description:
- //
- //
- // Arguments:
- // BOOL fEnable:
- //
- // Return (BOOL):
- // Returns the previous debugging state.
- //
- //--------------------------------------------------------------------------;
- BOOL WINAPI DbgEnable
- (
- BOOL fEnable
- )
- {
- BOOL fOldState;
- fOldState = __gfDbgEnabled;
- __gfDbgEnabled = fEnable;
- return (fOldState);
- } // DbgEnable()
- //--------------------------------------------------------------------------;
- //
- // UINT DbgSetLevel
- //
- // Description:
- //
- //
- // Arguments:
- // UINT uLevel:
- //
- // Return (UINT):
- // Returns the previous debugging level.
- //
- //--------------------------------------------------------------------------;
- UINT WINAPI DbgSetLevel
- (
- UINT uLevel
- )
- {
- UINT uOldLevel;
- uOldLevel = __guDbgLevel;
- __guDbgLevel = uLevel;
- return (uOldLevel);
- } // DbgSetLevel()
- //--------------------------------------------------------------------------;
- //
- // UINT DbgGetLevel
- //
- // Description:
- //
- //
- // Arguments:
- // None.
- //
- // Return (UINT):
- // Returns the current debugging level.
- //
- //--------------------------------------------------------------------------;
- UINT WINAPI DbgGetLevel
- (
- void
- )
- {
- return (__guDbgLevel);
- } // DbgGetLevel()
- //--------------------------------------------------------------------------;
- //
- // UINT DbgInitialize
- //
- // Description:
- //
- //
- // Arguments:
- // BOOL fEnable:
- //
- // Return (UINT):
- // Returns the debugging level that was set.
- //
- //--------------------------------------------------------------------------;
- UINT WINAPI DbgInitialize
- (
- BOOL fEnable
- )
- {
- UINT uLevel;
- uLevel = GetProfileIntA(DEBUG_SECTION, DEBUG_MODULE_NAME, (UINT)-1);
- if ((UINT)-1 == uLevel)
- {
- //
- // if the debug key is not present, then force debug output to
- // be disabled. this way running a debug version of a component
- // on a non-debugging machine will not generate output unless
- // the debug key exists.
- //
- uLevel = 0;
- fEnable = FALSE;
- }
- DbgSetLevel(uLevel);
- DbgEnable(fEnable);
- return (__guDbgLevel);
- } // DbgInitialize()
- #endif // #ifdef DEBUG