From 1089adf18d5199dc70acfccdfe8885f71846f736 Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Fri, 29 Mar 2019 22:54:44 +0000 Subject: [PATCH] Cause fatal errors to trigger a crashpad crash on Windows release builds. This is needed because Qt changed from `std::abort` to `__fastfail`, which can't be caught by crashpad. --- src/blackmisc/loghandler.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/blackmisc/loghandler.cpp b/src/blackmisc/loghandler.cpp index ba2c7ffc6..a40d0d442 100644 --- a/src/blackmisc/loghandler.cpp +++ b/src/blackmisc/loghandler.cpp @@ -14,6 +14,10 @@ #include "blackmisc/worker.h" #include "blackconfig/buildconfig.h" +#ifdef BLACK_USE_CRASHPAD +#include "crashpad/client/simulate_crash.h" +#endif + #include #include #include @@ -44,7 +48,13 @@ namespace BlackMisc const CStatusMessage statusMessage(type, context, message); const auto invokee = [statusMessage] { CLogHandler::instance()->logLocalMessage(statusMessage); }; #if defined(Q_CC_MSVC) && defined(QT_NO_DEBUG) - if (type == QtFatalMsg) { MessageBoxW(nullptr, message.toStdWString().c_str(), nullptr, MB_OK); } + if (type == QtFatalMsg) + { + MessageBoxW(nullptr, message.toStdWString().c_str(), nullptr, MB_OK); // display assert dialog in release build +# if defined(BLACK_USE_CRASHPAD) + CRASHPAD_SIMULATE_CRASH(); // workaround inability to catch __fastfail +# endif + } #endif if (type == QtFatalMsg && CLogHandler::instance()->thread() != QThread::currentThread()) {