debug.h
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:8k
源码类别:

打印编程

开发平台:

Visual C++

  1. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. //  ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. //  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. //  PARTICULAR PURPOSE.
  5. //
  6. //  Copyright  1996 - 2003  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  FILE:   Debug.H
  9. //
  10. //
  11. //  PURPOSE:    Define common data types, and external function prototypes
  12. //          for debugging functions. Also defines the various debug macros.
  13. //
  14. //  PLATFORMS:
  15. //
  16. //    Windows XP, Windows Server 2003, Windows codenamed Longhorn
  17. //
  18. //
  19. //  History:
  20. //          06/28/03    xxx created.
  21. //
  22. //
  23. #ifndef _DEBUG_H
  24. #define _DEBUG_H
  25. #include "devmode.h"
  26. // VC and Build use different debug defines.
  27. // The following makes it so either will
  28. // cause the inclusion of debugging code.
  29. #if !defined(_DEBUG) && defined(DBG)
  30.     #define _DEBUG      DBG
  31. #elif defined(_DEBUG) && !defined(DBG)
  32.     #define DBG         _DEBUG
  33. #endif
  34. /////////////////////////////////////////////////////////
  35. //      Macros
  36. /////////////////////////////////////////////////////////
  37. //
  38. // These macros are used for debugging purposes. They expand
  39. // to white spaces on a free build. Here is a brief description
  40. // of what they do and how they are used:
  41. //
  42. // giDebugLevel
  43. // Global variable which set the current debug level to control
  44. // the amount of debug messages emitted.
  45. //
  46. // VERBOSE(msg)
  47. // Display a message if the current debug level is <= DBG_VERBOSE.
  48. //
  49. // TERSE(msg)
  50. // Display a message if the current debug level is <= DBG_TERSE.
  51. //
  52. // WARNING(msg)
  53. // Display a message if the current debug level is <= DBG_WARNING.
  54. // The message format is: WRN filename (linenumber): message
  55. //
  56. // ERR(msg)
  57. // Similiar to WARNING macro above - displays a message
  58. // if the current debug level is <= DBG_ERROR.
  59. //
  60. // ASSERT(cond)
  61. // Verify a condition is true. If not, force a breakpoint.
  62. //
  63. // ASSERTMSG(cond, msg)
  64. // Verify a condition is true. If not, display a message and
  65. // force a breakpoint.
  66. //
  67. // RIP(msg)
  68. // Display a message and force a breakpoint.
  69. //
  70. // Usage:
  71. // These macros require extra parantheses for the msg argument
  72. // example, ASSERTMSG(x > 0, ("x is less than 0n"));
  73. //           WARNING(("App passed NULL pointer, ignoring...n"));
  74. //
  75. #define DBG_VERBOSE     1
  76. #define DBG_TERSE       2
  77. #define DBG_WARNING 3
  78. #define DBG_ERROR       4
  79. #define DBG_RIP         5
  80. #define DBG_NONE        6
  81. #define DLLTEXT(s)      TEXT("BITMAP:  ") TEXT(s)
  82. #define ERRORTEXT(s)    TEXT("ERROR ") DLLTEXT(s)
  83. #if DBG
  84.     #define OEMDBG(iDbgLvl, szTag)      COemUniDbg OEMDbg(iDbgLvl, szTag)
  85.     #define DebugMsg    OEMDbg.OEMDebugMessage
  86.     extern INT giDebugLevel;
  87.     #define DBGMSG(level, prefix, msg) { 
  88.         if (giDebugLevel <= (level)) { 
  89.             DebugMsg("%s %s (%d): ", prefix, StripDirPrefixA(__FILE__), __LINE__); 
  90.             DebugMsg(msg); 
  91.         } 
  92.     }
  93.     #define VERBOSE     if(giDebugLevel <= DBG_VERBOSE) DebugMsg
  94.     #define TERSE       if(giDebugLevel <= DBG_TERSE) DebugMsg
  95.     #define WARNING     if(giDebugLevel <= DBG_WARNING) DebugMsg
  96.     #define ERR         if(giDebugLevel <= DBG_ERROR) DebugMsg
  97.     #define DBG_OEMDMPARAM(iDbgLvl, szLabel, pobj)              {OEMDbg.vDumpOemDMParam(iDbgLvl, szLabel, pobj);}
  98.     #define DBG_OEMDEVMODE(iDbgLvl, szLabel, pobj)              {OEMDbg.vDumpOemDevMode(iDbgLvl, szLabel, pobj);}
  99.     #define DBG_SURFOBJ(iDbgLvl, szLabel, pobj)                 {OEMDbg.vDumpSURFOBJ(iDbgLvl, szLabel, pobj);}
  100.     #define DBG_STROBJ(iDbgLvl, szLabel, pobj)                  {OEMDbg.vDumpSTROBJ(iDbgLvl, szLabel, pobj);}
  101.     #define DBG_FONTOBJ(iDbgLvl, szLabel, pobj)                 {OEMDbg.vDumpFONTOBJ(iDbgLvl, szLabel, pobj);}
  102.     #define DBG_CLIPOBJ(iDbgLvl, szLabel, pobj)                 {OEMDbg.vDumpCLIPOBJ(iDbgLvl, szLabel, pobj);}
  103.     #define DBG_BRUSHOBJ(iDbgLvl, szLabel, pobj)                    {OEMDbg.vDumpBRUSHOBJ(iDbgLvl, szLabel, pobj);}
  104.     #define DBG_GDIINFO(iDbgLvl, szLabel, pobj)                 {OEMDbg.vDumpGDIINFO(iDbgLvl, szLabel, pobj);}
  105.     #define DBG_DEVINFO(iDbgLvl, szLabel, pobj)                 {OEMDbg.vDumpDEVINFO(iDbgLvl, szLabel, pobj);}
  106.     #define DBG_BMPINFO(iDbgLvl, szLabel, pobj)                 {OEMDbg.vDumpBitmapInfoHeader(iDbgLvl, szLabel, pobj);}
  107.     #define DBG_POINTL(iDbgLvl, szLabel, pobj)                  {OEMDbg.vDumpPOINTL(iDbgLvl, szLabel, pobj);}
  108.     #define DBG_RECTL(iDbgLvl, szLabel, pobj)                       {OEMDbg.vDumpRECTL(iDbgLvl, szLabel, pobj);}
  109.     #define DBG_XLATEOBJ(iDbgLvl, szLabel, pobj)                    {OEMDbg.vDumpXLATEOBJ(iDbgLvl, szLabel, pobj);}
  110.     #define DBG_COLORADJUSTMENT(iDbgLvl, szLabel, pobj)         {OEMDbg.vDumpCOLORADJUSTMENT(iDbgLvl, szLabel, pobj);}
  111.     #define ASSERT(cond) 
  112.     { 
  113.         if (! (cond)) 
  114.         { 
  115.             RIP(("n")); 
  116.         } 
  117.     }
  118.     #define ASSERTMSG(cond, msg) 
  119.     { 
  120.         if (! (cond)) { 
  121.             RIP(msg); 
  122.         } 
  123.     }
  124.     #define RIP(msg) 
  125.     { 
  126.         DBGMSG(DBG_RIP, "RIP", msg); 
  127.         DebugBreak(); 
  128.     }
  129. #else // !DBG
  130.     #define OEMDBG(iDbgLvl, szTag)
  131.     #define DebugMsg    NOP_FUNCTION
  132.     #define VERBOSE     NOP_FUNCTION
  133.     #define TERSE       NOP_FUNCTION
  134.     #define WARNING     NOP_FUNCTION
  135.     #define ERR         NOP_FUNCTION
  136.     #define DBG_OEMDMPARAM(iDbgLvl, szLabel, pobj)          NOP_FUNCTION
  137.     #define DBG_OEMDEVMODE(iDbgLvl, szLabel, pobj)          NOP_FUNCTION
  138.     #define DBG_SURFOBJ(iDbgLvl, szLabel, pobj)             NOP_FUNCTION
  139.     #define DBG_STROBJ(iDbgLvl, szLabel, pobj)              NOP_FUNCTION
  140.     #define DBG_FONTOBJ(iDbgLvl, szLabel, pobj)             NOP_FUNCTION
  141.     #define DBG_CLIPOBJ(iDbgLvl, szLabel, pobj)             NOP_FUNCTION
  142.     #define DBG_BRUSHOBJ(iDbgLvl, szLabel, pobj)                NOP_FUNCTION
  143.     #define DBG_GDIINFO(iDbgLvl, szLabel, pobj)             NOP_FUNCTION
  144.     #define DBG_DEVINFO(iDbgLvl, szLabel, pobj)             NOP_FUNCTION
  145.     #define DBG_BMPINFO(iDbgLvl, szLabel, pobj)             NOP_FUNCTION
  146.     #define DBG_POINTL(iDbgLvl, szLabel, pobj)              NOP_FUNCTION
  147.     #define DBG_RECTL(iDbgLvl, szLabel, pobj)                   NOP_FUNCTION
  148.     #define DBG_XLATEOBJ(iDbgLvl, szLabel, pobj)                NOP_FUNCTION
  149.     #define DBG_COLORADJUSTMENT(iDbgLvl, szLabel, pobj)     NOP_FUNCTION
  150.     #define ASSERT(cond)
  151.     #define ASSERTMSG(cond, msg)
  152.     #define RIP(msg)
  153. #endif
  154. typedef struct DBG_FLAGS {
  155.     LPWSTR pszFlag;
  156.     DWORD dwFlag;
  157. } *PDBG_FLAGS;
  158. class COemUniDbg
  159. {
  160. public:
  161.     COemUniDbg(INT iDebugLevel, __in PWSTR pszTag);
  162.     ~COemUniDbg();
  163.     BOOL __stdcall OEMDebugMessage(LPCWSTR, ...);
  164.     void __stdcall vDumpOemDMParam(INT iDebugLevel, __in PWSTR pszInLabel, POEMDMPARAM pOemDMParam);
  165.     void __stdcall vDumpOemDevMode(INT iDebugLevel, __in PWSTR pszInLabel, PCOEMDEV pOemDevmode);
  166.     void __stdcall vDumpSURFOBJ(INT iDebugLevel, __in PWSTR pszInLabel, SURFOBJ *pso);
  167.     void __stdcall vDumpSTROBJ(INT iDebugLevel, __in PWSTR pszInLabel, STROBJ *pstro);
  168.     void __stdcall vDumpFONTOBJ(INT iDebugLevel, __in PWSTR pszInLabel, FONTOBJ *pfo);
  169.     void __stdcall vDumpCLIPOBJ(INT iDebugLevel, __in PWSTR pszInLabel, CLIPOBJ *pco);
  170.     void __stdcall vDumpBRUSHOBJ(INT iDebugLevel, __in PWSTR pszInLabel, BRUSHOBJ *pbo);
  171.     void __stdcall vDumpGDIINFO(INT iDebugLevel, __in PWSTR pszInLabel, GDIINFO *pGdiInfo);
  172.     void __stdcall vDumpDEVINFO(INT iDebugLevel, __in PWSTR pszInLabel, DEVINFO *pDevInfo);
  173.     void __stdcall vDumpBitmapInfoHeader(INT iDebugLevel, __in PWSTR pszInLabel, PBITMAPINFOHEADER pBitmapInfoHeader);
  174.     void __stdcall vDumpPOINTL(INT iDebugLevel, __in PWSTR pszInLabel, POINTL *pptl);
  175.     void __stdcall vDumpRECTL(INT iDebugLevel, __in PWSTR pszInLabel, RECTL *prcl);
  176.     void __stdcall vDumpXLATEOBJ(INT iDebugLevel, __in PWSTR pszInLabel, XLATEOBJ *pxlo);
  177.     void __stdcall vDumpCOLORADJUSTMENT(INT iDebugLevel, __in PWSTR pszInLabel, COLORADJUSTMENT *pca);
  178. private:
  179.     BOOL __stdcall OEMRealDebugMessage(DWORD dwSize, LPCWSTR lpszMessage, va_list arglist);
  180.     PCSTR __stdcall StripDirPrefixA(IN PCSTR    pstrFilename);
  181.     PCWSTR __stdcall EnsureLabel(PCWSTR pszInLabel, PCWSTR pszDefLabel);
  182.     void __stdcall vDumpFlags(DWORD dwFlags, PDBG_FLAGS pDebugFlags);
  183. };
  184. #endif