Fix minidump missing exception stack trace
This commit is contained in:
parent
565d51ad99
commit
577ac1381c
1 changed files with 12 additions and 3 deletions
|
@ -43,6 +43,9 @@
|
||||||
|
|
||||||
static QWidget *s_parentWindow = NULL;
|
static QWidget *s_parentWindow = NULL;
|
||||||
static bool s_reportProjInfo = false;
|
static bool s_reportProjInfo = false;
|
||||||
|
#ifdef _WIN32
|
||||||
|
static PEXCEPTION_POINTERS s_exceptionPtr = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -60,15 +63,16 @@ static const char *filenameOnly(const char *path) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#define HAS_MINIDUMP
|
#define HAS_MINIDUMP
|
||||||
static bool generateMinidump(TFilePath dumpFile) {
|
static bool generateMinidump(TFilePath dumpFile,
|
||||||
|
PEXCEPTION_POINTERS exceptionInfo) {
|
||||||
HANDLE hDumpFile = CreateFileW(dumpFile.getWideString().c_str(),
|
HANDLE hDumpFile = CreateFileW(dumpFile.getWideString().c_str(),
|
||||||
GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
|
GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
|
||||||
if (hDumpFile == INVALID_HANDLE_VALUE) return false;
|
if (hDumpFile == INVALID_HANDLE_VALUE) return false;
|
||||||
|
|
||||||
MINIDUMP_EXCEPTION_INFORMATION mdei;
|
MINIDUMP_EXCEPTION_INFORMATION mdei;
|
||||||
mdei.ThreadId = GetCurrentThreadId();
|
mdei.ThreadId = GetCurrentThreadId();
|
||||||
mdei.ExceptionPointers = NULL;
|
mdei.ExceptionPointers = exceptionInfo;
|
||||||
mdei.ClientPointers = FALSE;
|
mdei.ClientPointers = TRUE;
|
||||||
|
|
||||||
if (MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile,
|
if (MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile,
|
||||||
MiniDumpNormal, &mdei, 0, NULL)) {
|
MiniDumpNormal, &mdei, 0, NULL)) {
|
||||||
|
@ -261,6 +265,7 @@ LONG WINAPI exceptionHandler(PEXCEPTION_POINTERS info) {
|
||||||
if (handling) return EXCEPTION_CONTINUE_SEARCH;
|
if (handling) return EXCEPTION_CONTINUE_SEARCH;
|
||||||
|
|
||||||
handling = true;
|
handling = true;
|
||||||
|
s_exceptionPtr = info;
|
||||||
if (CrashHandler::trigger(reason, true)) _Exit(1);
|
if (CrashHandler::trigger(reason, true)) _Exit(1);
|
||||||
handling = false;
|
handling = false;
|
||||||
|
|
||||||
|
@ -549,7 +554,11 @@ bool CrashHandler::trigger(const QString reason, bool showDialog) {
|
||||||
TFilePath fpDump = ToonzFolder::getCrashReportFolder() + dumpName;
|
TFilePath fpDump = ToonzFolder::getCrashReportFolder() + dumpName;
|
||||||
|
|
||||||
// Generate minidump
|
// Generate minidump
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool minidump = generateMinidump(fpDump, s_exceptionPtr);
|
||||||
|
#else
|
||||||
bool minidump = generateMinidump(fpDump);
|
bool minidump = generateMinidump(fpDump);
|
||||||
|
#endif;
|
||||||
|
|
||||||
// Generate report
|
// Generate report
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in a new issue