crash: add std::terminate handler

This commit is contained in:
outfoxxed 2026-03-28 23:07:37 -07:00
parent 313f4e47f6
commit 9bf752ac33
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E

View file

@ -5,9 +5,11 @@
#include <csignal>
#include <cstdio>
#include <cstring>
#include <exception>
#include <cpptrace/basic.hpp>
#include <cpptrace/forward.hpp>
#include <cpptrace/utils.hpp>
#include <qdatastream.h>
#include <qfile.h>
#include <qlogging.h>
@ -156,6 +158,21 @@ void signalHandler(
}
}
void handleCppTerminate() {
if (auto ptr = std::current_exception()) {
try {
std::rethrow_exception(ptr);
} catch (std::exception& e) {
qFatal().nospace() << "Terminate called with C++ exception ("
<< cpptrace::demangle(typeid(e).name()).data() << "): " << e.what();
} catch (...) {
qFatal() << "Terminate called with non exception object";
}
}
qFatal() << "Terminate called without active C++ exception";
}
} // namespace
void CrashHandler::init() {
@ -204,6 +221,8 @@ void CrashHandler::init() {
// NOLINTEND (misc-include-cleaner)
std::set_terminate(&handleCppTerminate);
qCInfo(logCrashHandler) << "Crash handler initialized.";
}