Browse Source

Fix ErrorAssert handling to allow bypassing the assert if we're attached to a debugger

Michael Hansen 9 years ago
parent
commit
6ad2f7ae24
  1. 22
      Sources/Plasma/CoreLib/HeadSpin.cpp
  2. 5
      Sources/Plasma/CoreLib/HeadSpin.h

22
Sources/Plasma/CoreLib/HeadSpin.cpp

@ -135,16 +135,13 @@ void ErrorAssert(int line, const char* file, const char* fmt, ...)
if (s_GuiAsserts)
{
if (_CrtDbgReport(_CRT_ASSERT, file, line, NULL, msg))
DebugBreak();
DebugBreakAlways();
} else
#endif // _MSC_VER
{
char str[] = "-------\nASSERTION FAILED:\nFile: %s Line: %i\nMessage: %s\n-------";
DebugMsg(str, file, line, msg);
DebugBreakIfDebuggerPresent();
// In case the debug trap is ignored
abort();
DebugBreakAlways();
}
#endif // HS_DEBUGGING
#else
@ -191,8 +188,23 @@ void DebugBreakIfDebuggerPresent()
// Debugger not present or some such shwiz.
// Whatever. Don't crash here.
}
#elif defined(HS_BUILD_FOR_UNIX)
if (DebugIsDebuggerPresent())
raise(SIGTRAP);
#else
// FIXME
#endif // _MSC_VER
}
void DebugBreakAlways()
{
#if defined(_MSC_VER)
DebugBreak();
#elif defined(HS_BUILD_FOR_UNIX)
raise(SIGTRAP);
#else
// FIXME
abort();
#endif // _MSC_VER
}

5
Sources/Plasma/CoreLib/HeadSpin.h

@ -374,8 +374,9 @@ hsDebugMessageProc hsSetStatusMessageProc(hsDebugMessageProc newProc);
void ErrorEnableGui (bool enabled);
void ErrorAssert (int line, const char* file, const char* fmt, ...);
bool DebugIsDebuggerPresent ();
void DebugBreakIfDebuggerPresent ();
bool DebugIsDebuggerPresent();
void DebugBreakIfDebuggerPresent();
void DebugBreakAlways();
void DebugMsg(const char* fmt, ...);
#ifdef HS_DEBUGGING

Loading…
Cancel
Save