mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/CrashHandler: Fixed generating crash logs from CRT debug assertions
(cherry picked from commit abdf6479dd)
This commit is contained in:
@@ -58,6 +58,7 @@ inline LPTSTR ErrorMessage(DWORD dw)
|
||||
TCHAR WheatyExceptionReport::m_szLogFileName[MAX_PATH];
|
||||
TCHAR WheatyExceptionReport::m_szDumpFileName[MAX_PATH];
|
||||
LPTOP_LEVEL_EXCEPTION_FILTER WheatyExceptionReport::m_previousFilter;
|
||||
_invalid_parameter_handler WheatyExceptionReport::m_previousCrtHandler;
|
||||
HANDLE WheatyExceptionReport::m_hReportFile;
|
||||
HANDLE WheatyExceptionReport::m_hDumpFile;
|
||||
HANDLE WheatyExceptionReport::m_hProcess;
|
||||
@@ -78,6 +79,7 @@ WheatyExceptionReport::WheatyExceptionReport() // Constructor
|
||||
{
|
||||
// Install the unhandled exception filter function
|
||||
m_previousFilter = SetUnhandledExceptionFilter(WheatyUnhandledExceptionFilter);
|
||||
m_previousCrtHandler = _set_invalid_parameter_handler(WheatyCrtHandler);
|
||||
m_hProcess = GetCurrentProcess();
|
||||
stackOverflowException = false;
|
||||
alreadyCrashed = false;
|
||||
@@ -98,6 +100,8 @@ WheatyExceptionReport::~WheatyExceptionReport()
|
||||
{
|
||||
if (m_previousFilter)
|
||||
SetUnhandledExceptionFilter(m_previousFilter);
|
||||
if (m_previousCrtHandler)
|
||||
_set_invalid_parameter_handler(m_previousCrtHandler);
|
||||
ClearSymbols();
|
||||
}
|
||||
|
||||
@@ -186,6 +190,11 @@ PEXCEPTION_POINTERS pExceptionInfo)
|
||||
return EXCEPTION_EXECUTE_HANDLER/*EXCEPTION_CONTINUE_SEARCH*/;
|
||||
}
|
||||
|
||||
void __cdecl WheatyExceptionReport::WheatyCrtHandler(wchar_t const* /*expression*/, wchar_t const* /*function*/, wchar_t const* /*file*/, unsigned int /*line*/, uintptr_t /*pReserved*/)
|
||||
{
|
||||
RaiseException(EXCEPTION_ACCESS_VIOLATION, 0, 0, nullptr);
|
||||
}
|
||||
|
||||
BOOL WheatyExceptionReport::_GetProcessorName(TCHAR* sProcessorName, DWORD maxcount)
|
||||
{
|
||||
if (!sProcessorName)
|
||||
|
||||
@@ -155,6 +155,8 @@ class WheatyExceptionReport
|
||||
static LONG WINAPI WheatyUnhandledExceptionFilter(
|
||||
PEXCEPTION_POINTERS pExceptionInfo);
|
||||
|
||||
static void __cdecl WheatyCrtHandler(wchar_t const* expression, wchar_t const* function, wchar_t const* file, unsigned int line, uintptr_t pReserved);
|
||||
|
||||
static void printTracesForAllThreads(bool);
|
||||
private:
|
||||
// where report info is extracted and generated
|
||||
@@ -192,6 +194,7 @@ class WheatyExceptionReport
|
||||
static TCHAR m_szLogFileName[MAX_PATH];
|
||||
static TCHAR m_szDumpFileName[MAX_PATH];
|
||||
static LPTOP_LEVEL_EXCEPTION_FILTER m_previousFilter;
|
||||
static _invalid_parameter_handler m_previousCrtHandler;
|
||||
static HANDLE m_hReportFile;
|
||||
static HANDLE m_hDumpFile;
|
||||
static HANDLE m_hProcess;
|
||||
|
||||
Reference in New Issue
Block a user