Debug.cpp
上传用户:apjinmao
上传日期:2007-01-02
资源大小:96k
文件大小:2k
源码类别:

PropertySheet

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #ifdef _PSEUDO_DEBUG   // entire file
  3. #ifdef _PSEUDO_DEBUG
  4. #undef THIS_FILE
  5. static char THIS_FILE[] = __FILE__;
  6. #endif
  7. LONG AssertBusy = -1;
  8. LONG AssertReallyBusy = -1;
  9. BOOL AssertFailedLine(LPCSTR lpszFileName, int nLine)
  10. {
  11. TCHAR szMessage[_MAX_PATH*2];
  12. InterlockedDecrement(&AssertReallyBusy);
  13. // format message into buffer
  14. wsprintf(szMessage, _T("File %hs, Line %d"),
  15. lpszFileName, nLine);
  16. TCHAR szT[_MAX_PATH*2 + 20];
  17. wsprintf(szT, _T("Assertion Failed: %sn"), szMessage);
  18. OutputDebugString(szT);
  19. if (InterlockedIncrement(&AssertBusy) > 0)
  20. {
  21. InterlockedDecrement(&AssertBusy);
  22. // assert within assert (examine call stack to determine first one)
  23. DebugBreak();
  24. return FALSE;
  25. }
  26. // active popup window for the current thread
  27. HWND hWndParent = GetActiveWindow();
  28. if (hWndParent != NULL)
  29. hWndParent = GetLastActivePopup(hWndParent);
  30. // display the assert
  31. int nCode = ::MessageBox(hWndParent, szMessage, _T("Assertion Failed!"),
  32. MB_TASKMODAL|MB_ICONHAND|MB_ABORTRETRYIGNORE|MB_SETFOREGROUND);
  33. // cleanup
  34. InterlockedDecrement(&AssertBusy);
  35. if (nCode == IDIGNORE)
  36. return FALSE;   // ignore
  37. if (nCode == IDRETRY)
  38. return TRUE;    // will cause DebugBreak
  39. AfxAbort();     // should not return (but otherwise DebugBreak)
  40. return TRUE;
  41. }
  42. void Trace(LPCTSTR lpszFormat, ...)
  43. {
  44. va_list args;
  45. va_start(args, lpszFormat);
  46. int nBuf;
  47. TCHAR szBuffer[512];
  48. nBuf = _vstprintf(szBuffer, lpszFormat, args);
  49. ASSERT(nBuf < (sizeof(szBuffer)/sizeof(szBuffer[0])));
  50. CString strMessage;
  51. if (AfxGetApp() != NULL)
  52. strMessage = ((CString) (AfxGetApp()->m_pszExeName)) + _T(": ");
  53. strMessage += szBuffer;
  54. OutputDebugString(strMessage);
  55. va_end(args);
  56. }
  57. #endif // _PSEUDO_DEBUG