Logo Search packages:      
Sourcecode: pwlib version File versions

Debug.cpp

#include "stdafx.h"

#ifdef _PSEUDO_DEBUG   // entire file

#ifdef _PSEUDO_DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

LONG AssertBusy = -1;
LONG AssertReallyBusy = -1;

BOOL AssertFailedLine(LPCSTR lpszFileName, int nLine)
{
      TCHAR szMessage[_MAX_PATH*2];

      InterlockedDecrement(&AssertReallyBusy);

      // format message into buffer
      wsprintf(szMessage, _T("File %hs, Line %d"),
            lpszFileName, nLine);

      TCHAR szT[_MAX_PATH*2 + 20];
      wsprintf(szT, _T("Assertion Failed: %s\n"), szMessage);
      OutputDebugString(szT);

      if (InterlockedIncrement(&AssertBusy) > 0)
      {
            InterlockedDecrement(&AssertBusy);

            // assert within assert (examine call stack to determine first one)
            DebugBreak();
            return FALSE;
      }

      // active popup window for the current thread
      HWND hWndParent = GetActiveWindow();
      if (hWndParent != NULL)
            hWndParent = GetLastActivePopup(hWndParent);

      // display the assert
      int nCode = ::MessageBox(hWndParent, szMessage, _T("Assertion Failed!"),
            MB_TASKMODAL|MB_ICONHAND|MB_ABORTRETRYIGNORE|MB_SETFOREGROUND);

      // cleanup
      InterlockedDecrement(&AssertBusy);

      if (nCode == IDIGNORE)
            return FALSE;   // ignore

      if (nCode == IDRETRY)
            return TRUE;    // will cause DebugBreak

      AfxAbort();     // should not return (but otherwise DebugBreak)
      return TRUE;
}

void Trace(LPCTSTR lpszFormat, ...)
{
      va_list args;
      va_start(args, lpszFormat);

      int nBuf;
      TCHAR szBuffer[512];

      nBuf = _vstprintf(szBuffer, lpszFormat, args);
      ASSERT(nBuf < (sizeof(szBuffer)/sizeof(szBuffer[0])));

      CString strMessage;

      if (AfxGetApp() != NULL)
            strMessage = ((CString) (AfxGetApp()->m_pszExeName)) + _T(": ");
      strMessage += szBuffer;
      OutputDebugString(strMessage);

      va_end(args);
}


#endif // _PSEUDO_DEBUG

Generated by  Doxygen 1.6.0   Back to index