1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

- Adding TRACY_NO_CRASH_HANDLER flag to allow for disabling the crash

handler
This commit is contained in:
Blake Taylor 2022-04-26 21:01:00 -07:00
parent c176d1d603
commit 6872d845e6

View File

@ -738,7 +738,7 @@ static BroadcastMessage& GetBroadcastMessage( const char* procname, size_t pnsz,
return msg; return msg;
} }
#if defined _WIN32 && !defined TRACY_UWP #if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER
static DWORD s_profilerThreadId = 0; static DWORD s_profilerThreadId = 0;
static char s_crashText[1024]; static char s_crashText[1024];
@ -847,7 +847,7 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp )
} }
#endif #endif
#ifdef __linux__ #if defined __linux__ && !defined TRACY_NO_CRASH_HANDLER
# ifndef TRACY_CRASH_SIGNAL # ifndef TRACY_CRASH_SIGNAL
# define TRACY_CRASH_SIGNAL SIGPWR # define TRACY_CRASH_SIGNAL SIGPWR
# endif # endif
@ -1077,7 +1077,6 @@ static void CrashHandler( int signal, siginfo_t* info, void* /*ucontext*/ )
} }
#endif #endif
enum { QueuePrealloc = 256 * 1024 }; enum { QueuePrealloc = 256 * 1024 };
static Profiler* s_instance = nullptr; static Profiler* s_instance = nullptr;
@ -1355,7 +1354,9 @@ Profiler::Profiler()
#endif #endif
, m_paramCallback( nullptr ) , m_paramCallback( nullptr )
, m_queryData( nullptr ) , m_queryData( nullptr )
#ifndef TRACY_NO_CRASH_HANDLER
, m_crashHandlerInstalled( false ) , m_crashHandlerInstalled( false )
#endif
{ {
assert( !s_instance ); assert( !s_instance );
s_instance = this; s_instance = this;
@ -1416,12 +1417,12 @@ void Profiler::SpawnWorkerThreads()
new(s_symbolThread) Thread( LaunchSymbolWorker, this ); new(s_symbolThread) Thread( LaunchSymbolWorker, this );
#endif #endif
#if defined _WIN32 && !defined TRACY_UWP #if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER
s_profilerThreadId = GetThreadId( s_thread->Handle() ); s_profilerThreadId = GetThreadId( s_thread->Handle() );
m_exceptionHandler = AddVectoredExceptionHandler( 1, CrashFilter ); m_exceptionHandler = AddVectoredExceptionHandler( 1, CrashFilter );
#endif #endif
#ifdef __linux__ #if defined __linux__ && !defined TRACY_NO_CRASH_HANDLER
struct sigaction threadFreezer = {}; struct sigaction threadFreezer = {};
threadFreezer.sa_handler = ThreadFreezer; threadFreezer.sa_handler = ThreadFreezer;
sigaction( TRACY_CRASH_SIGNAL, &threadFreezer, &m_prevSignal.pwr ); sigaction( TRACY_CRASH_SIGNAL, &threadFreezer, &m_prevSignal.pwr );
@ -1437,7 +1438,9 @@ void Profiler::SpawnWorkerThreads()
sigaction( SIGABRT, &crashHandler, &m_prevSignal.abrt ); sigaction( SIGABRT, &crashHandler, &m_prevSignal.abrt );
#endif #endif
#ifndef TRACY_NO_CRASH_HANDLER
m_crashHandlerInstalled = true; m_crashHandlerInstalled = true;
#endif
#ifdef TRACY_HAS_CALLSTACK #ifdef TRACY_HAS_CALLSTACK
InitCallstack(); InitCallstack();
@ -1450,11 +1453,11 @@ Profiler::~Profiler()
{ {
m_shutdown.store( true, std::memory_order_relaxed ); m_shutdown.store( true, std::memory_order_relaxed );
#if defined _WIN32 && !defined TRACY_UWP #if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER
if( m_crashHandlerInstalled ) RemoveVectoredExceptionHandler( m_exceptionHandler ); if( m_crashHandlerInstalled ) RemoveVectoredExceptionHandler( m_exceptionHandler );
#endif #endif
#ifdef __linux__ #if defined __linux__ && !defined TRACY_NO_CRASH_HANDLER
if( m_crashHandlerInstalled ) if( m_crashHandlerInstalled )
{ {
sigaction( TRACY_CRASH_SIGNAL, &m_prevSignal.pwr, nullptr ); sigaction( TRACY_CRASH_SIGNAL, &m_prevSignal.pwr, nullptr );
@ -1467,6 +1470,8 @@ Profiler::~Profiler()
} }
#endif #endif
#endif
#ifdef TRACY_HAS_SYSTEM_TRACING #ifdef TRACY_HAS_SYSTEM_TRACING
if( s_sysTraceThread ) if( s_sysTraceThread )
{ {