debug.h
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:2k
源码类别:

VC书籍

开发平台:

Visual C++

  1. #ifdef _DEBUG
  2. #ifndef _MSC_VER
  3. int _CrtDbgReport( 
  4.    int reportType,
  5.    const char *filename,
  6.    int linenumber,
  7.    const char *moduleName,
  8.    const char *lpszFormat ,
  9.    ... 
  10. )
  11. {
  12. char szBuffer[1024];
  13. va_list args;
  14. va_start(args, lpszFormat);
  15. _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(WCHAR), lpszFormat, args);
  16. OutputDebugString(szBuffer);
  17. va_end(args);
  18. return 1;
  19. }
  20. #else
  21. #include <crtdbg.h>
  22. #endif
  23. #define CP_TRACE0(format) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "n")
  24. #define CP_TRACE1(format, arg1) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "n", arg1)
  25. #define CP_TRACE2(format, arg1, arg2) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "n", arg1, arg2)
  26. #define CP_TRACE3(format, arg1, arg2, arg3) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "n", arg1, arg2, arg3)
  27. #define CP_TRACE4(format, arg1, arg2, arg3, arg4) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "n", arg1, arg2, arg3, arg4)
  28. #define CP_TRACE5(format, arg1, arg2, arg3, arg4, arg5) _CrtDbgReport(_CRT_WARN, __FILE__, __LINE__, NULL, format "n", arg1, arg2, arg3, arg4, arg5)
  29. //
  30. #define CP_ASSERT(expr) if(!(expr)) { CP_TRACE1("ASSERTION %s FAILS", #expr); __asm { int 3 }  }
  31. #define CP_FAIL(errstring) { CP_TRACE1("HARD FAILURE %s", #errstring); __asm { int 3 } }
  32. //
  33. #define CP_CHECKOBJECT(obj_ptr_typed) if(!obj_ptr_typed || !_CrtIsMemoryBlock(obj_ptr_typed, sizeof(*obj_ptr_typed), NULL, NULL, NULL)) { CP_TRACE1("POINTER %s is Bogus", #obj_ptr_typed); __asm { int 3 } }
  34. #else
  35. #define CP_CHECKOBJECT(obj_ptr_typed) {  }
  36. #define CP_ASSERT(expr) {  }
  37. #define CP_FAIL(expr) {  }
  38. #define CP_TRACE0(f) {  }
  39. #define CP_TRACE1(f, e1) {  }
  40. #define CP_TRACE2(f, e1, e2) {  }
  41. #define CP_TRACE3(f, e1, e2, e3) {  }
  42. #define CP_TRACE4(f, e1, e2, e3, e4) {  }
  43. #define CP_TRACE5(f, e1, e2, e3, e4, e5){  }
  44. #endif