From d181c1da75a12eaf5d5836999c668532e17be735 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 29 Aug 2018 23:59:24 +0200 Subject: Core/CrashHandler: Include assertion messages in crash reports (cherry picked from commit 62db1fb683c13b8dde0cc359564e090e0594658f) --- src/common/Debugging/WheatyExceptionReport.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'src/common/Debugging/WheatyExceptionReport.cpp') diff --git a/src/common/Debugging/WheatyExceptionReport.cpp b/src/common/Debugging/WheatyExceptionReport.cpp index 5521d574404..5bd0b470077 100644 --- a/src/common/Debugging/WheatyExceptionReport.cpp +++ b/src/common/Debugging/WheatyExceptionReport.cpp @@ -22,6 +22,7 @@ #include "WheatyExceptionReport.h" #include "Common.h" +#include "Errors.h" #include "GitRevision.h" #include @@ -171,8 +172,21 @@ PEXCEPTION_POINTERS pExceptionInfo) info.ExceptionPointers = pExceptionInfo; info.ThreadId = GetCurrentThreadId(); + MINIDUMP_USER_STREAM additionalStream = {}; + MINIDUMP_USER_STREAM_INFORMATION additionalStreamInfo = {}; + + if (pExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_ASSERTION_FAILURE && pExceptionInfo->ExceptionRecord->NumberParameters > 0) + { + additionalStream.Type = CommentStreamA; + additionalStream.Buffer = reinterpret_cast(pExceptionInfo->ExceptionRecord->ExceptionInformation[0]); + additionalStream.BufferSize = strlen(reinterpret_cast(pExceptionInfo->ExceptionRecord->ExceptionInformation[0])) + 1; + + additionalStreamInfo.UserStreamArray = &additionalStream; + additionalStreamInfo.UserStreamCount = 1; + } + MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), - m_hDumpFile, MiniDumpWithIndirectlyReferencedMemory, &info, nullptr, nullptr); + m_hDumpFile, MiniDumpWithIndirectlyReferencedMemory, &info, &additionalStreamInfo, nullptr); CloseHandle(m_hDumpFile); } @@ -504,6 +518,11 @@ PEXCEPTION_POINTERS pExceptionInfo) Log(_T("Exception code: %08X %s\r\n"), pExceptionRecord->ExceptionCode, GetExceptionString(pExceptionRecord->ExceptionCode)); + if (pExceptionRecord->ExceptionCode == EXCEPTION_ASSERTION_FAILURE && pExceptionRecord->NumberParameters >= 2) + { + pExceptionRecord->ExceptionAddress = reinterpret_cast(pExceptionRecord->ExceptionInformation[1]); + Log(_T("Assertion message: %s\r\n"), pExceptionRecord->ExceptionInformation[0]); + } // Now print information about where the fault occured TCHAR szFaultingModule[MAX_PATH]; -- cgit v1.2.3