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) 1993 - 1997 Microsoft Corporation. All Rights Reserved.
- *
- ******************************************************************************
- *
- * Debug.C
- *
- * Debug output routines
- *
- *****************************************************************************/
- #ifdef DEBUG
- #include <windows.h>
- #include <mmsystem.h>
- #include <stdarg.h>
- #include "global.h"
- #include "debug.h"
- PRIVATE VOID FAR CDECL DbgVPrintF(LPSTR szFmt, LPSTR va);
- /*
- ** Since we don't UNICODE our debugging messages, use the ASCII entry
- ** points regardless of how we are compiled.
- */
- #define wvsprintfA wvsprintf
- #define GetProfileIntA GetProfileInt
- #define OutputDebugStringA OutputDebugStr
- #define lstrcatA lstrcat
- #define lstrlenA lstrlen
- BOOL __gfDbgEnabled = TRUE;
- UINT __guDbgLevel = 0;
- WORD wDebugLevel = 0;
- /*****************************************************************************
- *
- * WinAssert
- *
- * Cause a debug out on an assert; breaking to the debugger if installed.
- *
- * lpstrExp - Assert expression string
- * lpstrFile - File of assert
- * dwLine - Line number of assert
- *
- * Handle WM_CREATE message to main application window.
- *
- * HWND hWnd - Window handle
- * CREATESTRUCT FAR* lpCreateStruct
- * - Pointer to creation parameters for the window.
- *
- *****************************************************************************/
- VOID WINAPI WinAssert(
- LPSTR lpstrExp,
- LPSTR lpstrFile,
- DWORD dwLine)
- {
- static char szWork[256];
- static char BCODE szFormat[] =
- "!Assert: %s#%lu [%s]";
- dprintf(0, (LPSTR)szFormat, (LPSTR)lpstrFile, dwLine, (LPSTR)lpstrExp);
- }
- /*****************************************************************************
- *
- * DbgVPrintF
- *
- * Format and print a debug output string
- *
- * szFmt - Format string
- * va - printf style argument list
- *
- * The following characters have special meanings when they are
- * the first in the string:
- *
- * ! Causes a break into the debugger after the output has been printed
- * ` Causes no module prefix to be printed
- * ~ Causes no CR/LF pair to follow the string
- *
- *****************************************************************************/
- VOID FAR CDECL DbgVPrintF(
- LPSTR szFmt,
- LPSTR va)
- {
- char ach[DEBUG_MAX_LINE_LEN];
- BOOL fDebugBreak = FALSE;
- BOOL fPrefix = TRUE;
- BOOL fCRLF = TRUE;
- ach[0] = ' ';
- for (;;)
- {
- switch(*szFmt)
- {
- case '!':
- fDebugBreak = TRUE;
- szFmt++;
- continue;
- case '`':
- fPrefix = FALSE;
- szFmt++;
- continue;
- case '~':
- fCRLF = FALSE;
- szFmt++;
- continue;
- }
- break;
- }
- if (fDebugBreak)
- {
- ach[0] = ' 07';
- ach[1] = ' ';
- }
- if (fPrefix)
- lstrcatA(ach, DEBUG_MODULE_NAME ": ");
- wvsprintfA(ach + lstrlenA(ach), szFmt, (LPSTR)va);
- if (fCRLF)
- lstrcatA(ach, "rn");
- OutputDebugStringA(ach);
- if (fDebugBreak)
- DebugBreak();
- }
- /*****************************************************************************
- *
- * dprintf
- *
- * User-level function to print a debug string
- *
- * uDbgLevel - Debug level of this message
- * szFmt - Format string for this message
- * ... - printf style arguments
- *
- * The message will be printed only if debugging is enabled and the messages's
- * debug level is less than or equal to the current debug level.
- *
- * This function is called by the DPF() macro in Debug.H.
- *
- *****************************************************************************/
- void FAR CDECL dprintf(
- UINT uDbgLevel,
- LPSTR szFmt,
- ...)
- {
- va_list va;
- if (!__gfDbgEnabled || (__guDbgLevel < uDbgLevel))
- return;
- va_start(va, szFmt);
- DbgVPrintF(szFmt, (LPSTR)va);
- va_end(va);
- }
- /*****************************************************************************
- *
- * DbgEnable
- *
- * Enable or disable debug output
- *
- * fEnable - Enable or disable output
- *
- * Returns the old state.
- *
- *****************************************************************************/
- BOOL WINAPI DbgEnable(
- BOOL fEnable)
- {
- BOOL fOldState;
- fOldState = __gfDbgEnabled;
- __gfDbgEnabled = fEnable;
- return (fOldState);
- }
- /*****************************************************************************
- *
- * DbgSetLevel
- *
- * Set the current level for debug output
- *
- * uLevel - New level for debug output
- *
- * Returns the old level.
- *
- *****************************************************************************/
- UINT WINAPI DbgSetLevel(
- UINT uLevel)
- {
- UINT uOldLevel;
- uOldLevel = __guDbgLevel;
- __guDbgLevel = wDebugLevel = uLevel;
- return (uOldLevel);
- }
- /*****************************************************************************
- *
- * DbgInitialize
- *
- * Get debug output settings from WIN.INI for this module
- *
- * fEnable - Enable or disable debug output
- *
- * Returns the current debug level
- *
- * The debug level will be read from the [debug] section of WIN.INI,
- * from an entry with this module's name as #define'd in Debug.H.
- *
- * WIN.INI:
- * [Debug]
- * Module=3
- *
- *****************************************************************************/
- UINT WINAPI DbgInitialize(BOOL fEnable)
- {
- DbgSetLevel(GetProfileIntA(DEBUG_SECTION, DEBUG_MODULE_NAME, 0));
- DbgEnable(fEnable);
- return (__guDbgLevel);
- }
- #endif