DEBUG.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //---------------------------------------------------------------------------
  2. // Debug.H
  3. //---------------------------------------------------------------------------
  4. // Contains the various macros and the like which are only useful in DEBUG
  5. // builds.
  6. //---------------------------------------------------------------------------
  7. // (C) Copyright 1995-1997 by Microsoft Corporation. All rights reserved.
  8. //
  9. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  10. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  11. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  12. // PARTICULAR PURPOSE.
  13. //---------------------------------------------------------------------------
  14. //---------------------------------------------------------------------------
  15. // All the things required to handle our ASSERT mechanism
  16. //---------------------------------------------------------------------------
  17. #undef DEBUG
  18. // ;begin_internal
  19. // BUGBUG DisplayAssert is not coded in this release,
  20. // until it is, debug builds do not get these debug functions
  21. // ;end_internal
  22. #ifdef DEBUG
  23. VOID DisplayAssert(LPSTR pszMsg, LPSTR pszAssert, LPSTR pszFile, UINT line);
  24. // *** Include this macro at the top of any source file using *ASSERT*() macros ***
  25. #define SZTHISFILE static char _szThisFile[] = __FILE__;
  26. // Our versions of the ASSERT and FAIL macros.
  27. #define ASSERT(fTest, szMsg)                                
  28.     if (!(fTest))                                           
  29.         {                                                   
  30.         static char szMsgCode[] = szMsg;                    
  31.         static char szAssert[] = #fTest;                    
  32.         DisplayAssert(szMsgCode, szAssert, _szThisFile, __LINE__); 
  33.         }
  34. #define FAIL(szMsg)                                         
  35.         { static char szMsgCode[] = szMsg;                    
  36.         DisplayAssert(szMsgCode, "FAIL", _szThisFile, __LINE__); }
  37. #else  // DEBUG
  38. #define SZTHISFILE
  39. #define ASSERT(fTest, err)
  40. #define FAIL(err)
  41. #endif // DEBUG
  42. //---------------------------------------------------------------------------
  43. // Macro that checks a pointer for validity on input
  44. //---------------------------------------------------------------------------
  45. #ifdef DEBUG
  46. #define CHECK_POINTER(val) if (!(val) || IsBadWritePtr((void *)(val), sizeof(void *))) return E_POINTER
  47. #else  // DEBUG
  48. #define CHECK_POINTER(val)
  49. #endif // DEBUG
  50. //---------------------------------------------------------------------------
  51. // Track signatures on objects for debugging
  52. //---------------------------------------------------------------------------
  53. #ifdef DEBUG
  54. #define SIG_destroyed 'XxXx'
  55. #define DECLARE_SIGNATURE(x)    DWORD __sig
  56. #define CHECK_SIGNATURE(x)      ASSERT(this->__sig == (x), "Bad signature")
  57. #define INIT_SIGNATURE(x)       this->__sig = (x)
  58. #define DESTROY_SIGNATURE(x)    this->__sig = SIG_destroyed
  59. #else // DEBUG
  60. #define DECLARE_SIGNATURE(x)
  61. #define CHECK_SIGNATURE(x)
  62. #define INIT_SIGNATURE(x)
  63. #define DESTROY_SIGNATURE(x)
  64. #endif // DEBUG
  65. //--- EOF -------------------------------------------------------------------