diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index f2bee6aa84bc734c0a965351277ad6550afa7bfb..41f503028f8a4b83c55f7571ba8949796c3837a8 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -337,6 +337,14 @@ DebuggerSettings::DebuggerSettings(QSettings *settings) item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnFatal")); insertItem(BreakOnFatal, item); + item = new SavedAction(this); + item->setText(tr("Break on \"abort\"")); + item->setCheckable(true); + item->setDefaultValue(false); + item->setValue(false); + item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnAbort")); + insertItem(BreakOnAbort, item); + // // Settings // diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index 85d2ba2bd844d45129d5ec46ab52632f797dc24d..081a11e6f235271d7a653acb5e54d4e380b2a419 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -155,6 +155,7 @@ enum DebuggerActionCode BreakOnCatch, BreakOnWarning, BreakOnFatal, + BreakOnAbort, // Registers AlwaysAdjustRegistersColumnWidths, diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index d25ea82ac46f937c1ca255a80814e904059f57ea..56e75f4ff03b0ee19f9b93ff996bc616e4186f08 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4932,6 +4932,9 @@ void GdbEngine::handleNamespaceExtraction(const GdbResponse &response) if (startParameters().startMode == AttachCore) { notifyInferiorSetupOk(); // No breakpoints in core files. } else { + if (debuggerCore()->boolSetting(BreakOnAbort) + && startParameters().toolChainAbi.os() == Abi::WindowsOS) + postCommand("-break-insert -f raise"); if (debuggerCore()->boolSetting(BreakOnWarning)) postCommand("-break-insert -f '" + qtNamespace() + "qWarning'"); if (debuggerCore()->boolSetting(BreakOnFatal)) diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp index b391389c6044758e54758bf92782c51ed7a4d024..8705bd96e1cfb9be354f36ccbe8f509888b5791c 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.cpp +++ b/src/plugins/debugger/gdb/gdboptionspage.cpp @@ -71,6 +71,7 @@ public: QCheckBox *checkBoxAutoEnrichParameters; QCheckBox *checkBoxBreakOnWarning; QCheckBox *checkBoxBreakOnFatal; + QCheckBox *checkBoxBreakOnAbort; QCheckBox *checkBoxEnableReverseDebugging; QGroupBox *groupBoxStartupCommands; @@ -164,6 +165,9 @@ public: checkBoxBreakOnFatal = new QCheckBox(groupBoxGeneral); checkBoxBreakOnFatal->setText(GdbOptionsPage::tr("Stop when a qFatal is issued")); + checkBoxBreakOnAbort = new QCheckBox(groupBoxGeneral); + checkBoxBreakOnAbort->setText(GdbOptionsPage::tr("Stop when abort is called")); + checkBoxEnableReverseDebugging = new QCheckBox(groupBoxGeneral); checkBoxEnableReverseDebugging->setText(GdbOptionsPage::tr("Enable reverse debugging")); checkBoxEnableReverseDebugging->setToolTip(GdbOptionsPage::tr( @@ -217,6 +221,7 @@ public: formLayout->addRow(checkBoxAutoEnrichParameters); formLayout->addRow(checkBoxBreakOnWarning); formLayout->addRow(checkBoxBreakOnFatal); + formLayout->addRow(checkBoxBreakOnAbort); formLayout->addRow(checkBoxEnableReverseDebugging); QGridLayout *startLayout = new QGridLayout(groupBoxStartupCommands); @@ -293,6 +298,8 @@ QWidget *GdbOptionsPage::createPage(QWidget *parent) m_ui->checkBoxBreakOnWarning); m_group.insert(debuggerCore()->action(BreakOnFatal), m_ui->checkBoxBreakOnFatal); + m_group.insert(debuggerCore()->action(BreakOnAbort), + m_ui->checkBoxBreakOnAbort); m_group.insert(debuggerCore()->action(GdbWatchdogTimeout), m_ui->spinBoxGdbWatchdogTimeout);