diff --git a/src/blackcore/application.cpp b/src/blackcore/application.cpp
index e5e5aa69f..2c3ba9c8c 100644
--- a/src/blackcore/application.cpp
+++ b/src/blackcore/application.cpp
@@ -1649,6 +1649,11 @@ namespace BlackCore
CCrashHandler::instance()->simulateCrash();
}
+ void CApplication::simulateAssert()
+ {
+ CCrashHandler::instance()->simulateAssert();
+ }
+
void CApplication::enableCrashDumpUpload(bool enable)
{
CCrashHandler::instance()->setUploadsEnabled(enable);
diff --git a/src/blackcore/application.h b/src/blackcore/application.h
index 972e53432..96c6827c3 100644
--- a/src/blackcore/application.h
+++ b/src/blackcore/application.h
@@ -309,6 +309,10 @@ namespace BlackCore
//! \private only for testing purposes
void simulateCrash();
+ //! Simulate an ASSERT
+ //! \private only for testing purposes
+ void simulateAssert();
+
//! Enable crash upload
//! \remark only change for testing
void enableCrashDumpUpload(bool enable);
diff --git a/src/blackgui/components/internalscomponent.cpp b/src/blackgui/components/internalscomponent.cpp
index 3e30cce6b..c13ce49ed 100644
--- a/src/blackgui/components/internalscomponent.cpp
+++ b/src/blackgui/components/internalscomponent.cpp
@@ -99,8 +99,9 @@ namespace BlackGui
if (sGui && sGui->isSupportingCrashpad())
{
ui->cb_CrashDumpUpload->setChecked(CCrashHandler::instance()->isCrashDumpUploadEnabled());
- connect(ui->pb_SimulateCrash, &QPushButton::released, this, &CInternalsComponent::simulateCrash);
- connect(ui->cb_CrashDumpUpload, &QCheckBox::toggled, this, &CInternalsComponent::onCrashDumpUploadToggled);
+ connect(ui->pb_SimulateCrash, &QPushButton::released, this, &CInternalsComponent::simulateCrash, Qt::QueuedConnection);
+ connect(ui->pb_SimulateAssert, &QPushButton::released, this, &CInternalsComponent::simulateAssert, Qt::QueuedConnection);
+ connect(ui->cb_CrashDumpUpload, &QCheckBox::toggled, this, &CInternalsComponent::onCrashDumpUploadToggled);
}
else
{
@@ -345,10 +346,23 @@ namespace BlackGui
}
const QMessageBox::StandardButton reply = QMessageBox::question(this, "crash simulation", "Really simulate crash?", QMessageBox::Yes | QMessageBox::No);
- if (reply != QMessageBox::Yes) { return; }
+ if (!sGui || reply != QMessageBox::Yes) { return; }
sGui->simulateCrash();
}
+ void CInternalsComponent::simulateAssert()
+ {
+ if (CBuildConfig::isReleaseBuild())
+ {
+ QMessageBox::information(this, "ASSERT simulation", "Not possible in release builds!");
+ return;
+ }
+
+ const QMessageBox::StandardButton reply = QMessageBox::question(this, "ASSERT simulation", "Really create an ASSERT?", QMessageBox::Yes | QMessageBox::No);
+ if (!sGui || reply != QMessageBox::Yes) { return; }
+ sGui->simulateAssert();
+ }
+
void CInternalsComponent::onCrashDumpUploadToggled(bool checked)
{
if (sGui && sGui->isSupportingCrashpad())
diff --git a/src/blackgui/components/internalscomponent.h b/src/blackgui/components/internalscomponent.h
index 4c1f4867a..7c0a63f6e 100644
--- a/src/blackgui/components/internalscomponent.h
+++ b/src/blackgui/components/internalscomponent.h
@@ -78,6 +78,9 @@ namespace BlackGui
//! Simulate a crash
void simulateCrash();
+ //! Simulate ASSERT
+ void simulateAssert();
+
//! Checkbox toggled
void onCrashDumpUploadToggled(bool checked);
diff --git a/src/blackgui/components/internalscomponent.ui b/src/blackgui/components/internalscomponent.ui
index 56c484c53..0c0ca66f9 100644
--- a/src/blackgui/components/internalscomponent.ui
+++ b/src/blackgui/components/internalscomponent.ui
@@ -320,6 +320,13 @@
+ -
+
+
+ assert!
+
+
+
@@ -751,6 +758,7 @@
cb_DebugContextApplication
cb_CrashDumpUpload
pb_SimulateCrash
+ pb_SimulateAssert
pb_LatestInterpolationLog
pb_LatestPartsLog
pte_NetworkCalls
@@ -760,10 +768,10 @@
pb_DisplayLog
pb_RequestFromNetwork
tb_History
- pb_SendAircraftPartsGui
pb_CurrentParts
cb_AircraftPartsIncremental
pb_SendAircraftPartsJson
+ pb_SendAircraftPartsGui
diff --git a/src/blackmisc/crashhandler.cpp b/src/blackmisc/crashhandler.cpp
index 270c5ae94..9076a832d 100644
--- a/src/blackmisc/crashhandler.cpp
+++ b/src/blackmisc/crashhandler.cpp
@@ -107,29 +107,29 @@ namespace BlackMisc
false, true);
this->crashAndLogAppendInfo(u"Init crash info at " % QDateTime::currentDateTimeUtc().toString());
- #endif
+#endif
}
void CCrashHandler::setUploadsEnabled(bool enable)
{
- #ifdef BLACK_USE_CRASHPAD
+#ifdef BLACK_USE_CRASHPAD
if (!m_crashReportDatabase) { return; }
crashpad::Settings *settings = m_crashReportDatabase->GetSettings();
settings->SetUploadsEnabled(enable);
- #else
+#else
Q_UNUSED(enable);
- #endif
+#endif
}
bool CCrashHandler::isCrashDumpUploadEnabled() const
{
- #ifdef BLACK_USE_CRASHPAD
+#ifdef BLACK_USE_CRASHPAD
if (!m_crashReportDatabase) { return false; }
crashpad::Settings *settings = m_crashReportDatabase->GetSettings();
bool enabled = false;
bool ok = settings->GetUploadsEnabled(&enabled);
return ok && enabled;
- #else
+#else
return false;
#endif
}
@@ -171,16 +171,28 @@ namespace BlackMisc
void CCrashHandler::simulateCrash()
{
- #ifdef BLACK_USE_CRASHPAD
+# ifdef BLACK_USE_CRASHPAD
CLogMessage(this).info(u"Simulated crash dump!");
m_crashAndLogInfo.appendInfo("Simulated crash dump!");
m_crashAndLogInfo.writeToFile();
CRASHPAD_SIMULATE_CRASH();
// real crash
// raise(SIGSEGV); #include
- #else
+# else
CLogMessage(this).warning(u"This compiler or platform does not support crashpad. Cannot simulate crash dump!");
-#endif
+# endif
+ }
+
+ void CCrashHandler::simulateAssert()
+ {
+# ifdef BLACK_USE_CRASHPAD
+ CLogMessage(this).info(u"Simulated ASSERT!");
+ m_crashAndLogInfo.appendInfo("Simulated ASSERT!");
+ m_crashAndLogInfo.writeToFile();
+ Q_ASSERT_X(false, Q_FUNC_INFO, "Test server to test Crash handler");
+# else
+ CLogMessage(this).warning(u"This compiler or platform does not support crashpad. Cannot simulate crash dump!");
+# endif
}
CCrashHandler::CCrashHandler(QObject *parent) :
diff --git a/src/blackmisc/crashhandler.h b/src/blackmisc/crashhandler.h
index b65f97cc4..39ab48b1f 100644
--- a/src/blackmisc/crashhandler.h
+++ b/src/blackmisc/crashhandler.h
@@ -73,6 +73,9 @@ namespace BlackMisc
//! Simulate a crash
void simulateCrash();
+ //! Simulate an ASSERT
+ void simulateAssert();
+
private:
CCrashHandler(QObject *parent = nullptr);