Allow to test an ASSERT (like the crashdump test)

This commit is contained in:
Klaus Basan
2019-07-25 18:38:55 +02:00
committed by Mat Sutcliffe
parent f6690136f2
commit 33cd96c2e3
7 changed files with 62 additions and 13 deletions

View File

@@ -1649,6 +1649,11 @@ namespace BlackCore
CCrashHandler::instance()->simulateCrash();
}
void CApplication::simulateAssert()
{
CCrashHandler::instance()->simulateAssert();
}
void CApplication::enableCrashDumpUpload(bool enable)
{
CCrashHandler::instance()->setUploadsEnabled(enable);

View File

@@ -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);

View File

@@ -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())

View File

@@ -78,6 +78,9 @@ namespace BlackGui
//! Simulate a crash
void simulateCrash();
//! Simulate ASSERT
void simulateAssert();
//! Checkbox toggled
void onCrashDumpUploadToggled(bool checked);

View File

@@ -320,6 +320,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pb_SimulateAssert">
<property name="text">
<string>assert!</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@@ -751,6 +758,7 @@
<tabstop>cb_DebugContextApplication</tabstop>
<tabstop>cb_CrashDumpUpload</tabstop>
<tabstop>pb_SimulateCrash</tabstop>
<tabstop>pb_SimulateAssert</tabstop>
<tabstop>pb_LatestInterpolationLog</tabstop>
<tabstop>pb_LatestPartsLog</tabstop>
<tabstop>pte_NetworkCalls</tabstop>
@@ -760,10 +768,10 @@
<tabstop>pb_DisplayLog</tabstop>
<tabstop>pb_RequestFromNetwork</tabstop>
<tabstop>tb_History</tabstop>
<tabstop>pb_SendAircraftPartsGui</tabstop>
<tabstop>pb_CurrentParts</tabstop>
<tabstop>cb_AircraftPartsIncremental</tabstop>
<tabstop>pb_SendAircraftPartsJson</tabstop>
<tabstop>pb_SendAircraftPartsGui</tabstop>
</tabstops>
<resources>
<include location="../../blackmisc/blackmisc.qrc"/>

View File

@@ -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 <signal.h>
#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) :

View File

@@ -73,6 +73,9 @@ namespace BlackMisc
//! Simulate a crash
void simulateCrash();
//! Simulate an ASSERT
void simulateAssert();
private:
CCrashHandler(QObject *parent = nullptr);