mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-23 07:15:35 +08:00
Allow to test an ASSERT (like the crashdump test)
This commit is contained in:
committed by
Mat Sutcliffe
parent
f6690136f2
commit
33cd96c2e3
@@ -1649,6 +1649,11 @@ namespace BlackCore
|
||||
CCrashHandler::instance()->simulateCrash();
|
||||
}
|
||||
|
||||
void CApplication::simulateAssert()
|
||||
{
|
||||
CCrashHandler::instance()->simulateAssert();
|
||||
}
|
||||
|
||||
void CApplication::enableCrashDumpUpload(bool enable)
|
||||
{
|
||||
CCrashHandler::instance()->setUploadsEnabled(enable);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -78,6 +78,9 @@ namespace BlackGui
|
||||
//! Simulate a crash
|
||||
void simulateCrash();
|
||||
|
||||
//! Simulate ASSERT
|
||||
void simulateAssert();
|
||||
|
||||
//! Checkbox toggled
|
||||
void onCrashDumpUploadToggled(bool checked);
|
||||
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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) :
|
||||
|
||||
@@ -73,6 +73,9 @@ namespace BlackMisc
|
||||
//! Simulate a crash
|
||||
void simulateCrash();
|
||||
|
||||
//! Simulate an ASSERT
|
||||
void simulateAssert();
|
||||
|
||||
private:
|
||||
CCrashHandler(QObject *parent = nullptr);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user