4#include "Stroika/Foundation/StroikaPreComp.h"
6#include "Stroika/Foundation/Characters/SDKChar.h"
9#include "Stroika/Foundation/Debug/Debugger.h"
16using namespace Stroika::Foundation::Debug;
24void Debug::DefaultFatalErrorHandler ([[maybe_unused]]
const SDKChar* msg)
noexcept
26 DbgTrace (
"Fatal Error {} encountered"_f, String::FromSDKString (msg));
27 if (
auto exc = current_exception ()) {
28 DbgTrace (
"Uncaught exception: {}"_f, exc);
30#if qStroika_Foundation_Debug_DefaultTracingOn
32 wstring tmp{Debug::BackTrace::Capture ()};
33 if (not tmp.empty ()) {
38 Debug::DropIntoDebuggerIfPresent ();
48 void (*sFatalErrorHandler_) (
const SDKChar* msg)
noexcept =
nullptr;
49 void TerminateHandler_ ()
51 (sFatalErrorHandler_) (SDKSTR (
"std::terminate () called"));
53#if qStroika_Foundation_Common_Platform_Windows
54 void PurecallHandler_ ()
56 (sFatalErrorHandler_) (SDKSTR (
"purecall_handler_ () called"));
61void Debug::RegisterDefaultFatalErrorHandlers (
void (*fatalErrorHandler) (
const SDKChar* msg)
noexcept)
64 sFatalErrorHandler_ = fatalErrorHandler;
65 set_terminate (TerminateHandler_);
66#if qStroika_Foundation_Common_Platform_Windows
68 (void)_set_purecall_handler (PurecallHandler_);
#define RequireNotNull(p)
conditional_t< qTargetPlatformSDKUseswchar_t, wchar_t, char > SDKChar