1#include <Foundation/FoundationInternal.h>
2PL_FOUNDATION_INTERNAL_HEADER
4#include <Foundation/Logging/Log.h>
5#include <Foundation/System/CrashHandler.h>
6#include <Foundation/System/MiniDumpUtils.h>
7#include <Foundation/System/StackTracer.h>
13static void PrintHelper(
const char* szString)
18static void plCrashHandlerFunc() noexcept
20 if (plCrashHandler::GetCrashHandler() !=
nullptr)
22 plCrashHandler::GetCrashHandler()->HandleCrash(
nullptr);
26 std::signal(SIGABRT, SIG_DFL);
30static void plSignalHandler(
int signum)
39 plLog::Printf(
"Signal SIGILL: illegal instruction - invalid function image\n");
48 plLog::Printf(
"Signal SIGTERM: Software termination signal from kill\n");
51 plLog::Printf(
"Signal SIGABRT: abnormal termination triggered by abort call\n");
58 if (plCrashHandler::GetCrashHandler() !=
nullptr)
60 plCrashHandler::GetCrashHandler()->HandleCrash(
nullptr);
64 std::signal(signum, SIG_DFL);
65 kill(getpid(), signum);
70 s_pActiveHandler = pHandler;
72 if (s_pActiveHandler !=
nullptr)
74 std::signal(SIGINT, plSignalHandler);
75 std::signal(SIGILL, plSignalHandler);
76 std::signal(SIGFPE, plSignalHandler);
77 std::signal(SIGSEGV, plSignalHandler);
78 std::signal(SIGTERM, plSignalHandler);
79 std::signal(SIGABRT, plSignalHandler);
80 std::set_terminate(plCrashHandlerFunc);
84 std::signal(SIGINT,
nullptr);
85 std::signal(SIGILL,
nullptr);
86 std::signal(SIGFPE,
nullptr);
87 std::signal(SIGSEGV,
nullptr);
88 std::signal(SIGTERM,
nullptr);
89 std::signal(SIGABRT,
nullptr);
90 std::set_terminate(
nullptr);
94bool plCrashHandler_WriteMiniDump::WriteOwnProcessMiniDump(
void* pOsSpecificData)
99void plCrashHandler_WriteMiniDump::PrintStackTrace(
void* pOsSpecificData)
104 if (std::type_info* type = abi::__cxa_current_exception_type())
106 if (
const char* szName = type->name())
110 if (
char* szNiceName = abi::__cxa_demangle(szName, 0, 0, &status))
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Helper class to manage the top level exception handler.
Definition CrashHandler.h:21
static void Printf(const char *szFormat,...)
Calls low-level OS functionality to print a string to the typical outputs. Forwards to Print.
Definition Log.cpp:271
static void ResolveStackTrace(const plArrayPtr< void * > &trace, PrintFunc printFunc)
Print a stack trace.
Definition StackTracer_NoImpl.h:12
static plUInt32 GetStackTrace(plArrayPtr< void * > &ref_trace, void *pContext=nullptr)
Captures the current stack trace.
Definition StackTracer_NoImpl.h:7