-// ----------------------------------------------------------------------------
-// debug helper
-// ----------------------------------------------------------------------------
-
-#ifdef __WXDEBUG__
-
-// break into the debugger
-void Trap()
-{
-#ifdef __WXMSW__
- DebugBreak();
-#elif defined(__WXMAC__)
-#if __powerc
- Debugger();
-#else
- SysBreak();
-#endif
-#elif defined(__UNIX__)
- raise(SIGTRAP);
-#else
- // TODO
-#endif // Win/Unix
-}
-
-// this function is called when an assert fails
-void wxOnAssert(const char *szFile, int nLine, const wxChar *szMsg)
-{
- // this variable can be set to true to suppress "assert failure" messages
- static bool s_bNoAsserts = FALSE;
- static bool s_bInAssert = FALSE; // FIXME MT-unsafe
-
- if ( s_bInAssert ) {
- // He-e-e-e-elp!! we're trapped in endless loop
- Trap();
-
- s_bInAssert = FALSE;
-
- return;
- }
-
- s_bInAssert = TRUE;
-
- wxChar szBuf[LOG_BUFFER_SIZE];
-
- // make life easier for people using VC++ IDE: clicking on the message
- // will take us immediately to the place of the failed assert
-#ifdef __VISUALC__
- wxSprintf(szBuf, _T("%s(%d): assert failed"), szFile, nLine);
-#else // !VC++
- // make the error message more clear for all the others
-#ifdef wxSprintf
- wxSprintf(szBuf, _T("Assert failed in file %s at line %d"), szFile, nLine);
-#else
- wxSprintf(szBuf, _T("Assert failed in file %hs at line %d"), szFile, nLine);
-#endif
-#endif // VC/!VC
-
- if ( szMsg != NULL ) {
- wxStrcat(szBuf, _T(": "));
- wxStrcat(szBuf, szMsg);
- }
- else {
- wxStrcat(szBuf, _T("."));
- }
-
- if ( !s_bNoAsserts ) {
- // send it to the normal log destination
- wxLogDebug(szBuf);
-
-#if wxUSE_NOGUI
- Trap();
-#else
- // this message is intentionally not translated - it is for
- // developpers only
- wxStrcat(szBuf, _T("\nDo you want to stop the program?"
- "\nYou can also choose [Cancel] to suppress "
- "further warnings."));
-
- switch ( wxMessageBox(szBuf, _("Debug"),
- wxYES_NO | wxCANCEL | wxICON_STOP ) ) {
- case wxYES:
- Trap();
- break;
-
- case wxCANCEL:
- s_bNoAsserts = TRUE;
- break;
-
- //case wxNO: nothing to do
- }
-#endif // USE_NOGUI
- }
-
- s_bInAssert = FALSE;
-}
-
-#endif //WXDEBUG