From 87de819729e1da419ba70fb8c1a67f0618a7b8fe Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 15 Jan 2012 22:21:59 +0200 Subject: [PATCH] GDB/Windows: Break on abort Task-number: QTCREATORBUG-6773 Change-Id: I082b7d04730a5014ad935d6a079a1829dfcdd34c Reviewed-by: hjk --- src/plugins/debugger/debuggeractions.cpp | 8 ++++++++ src/plugins/debugger/debuggeractions.h | 1 + src/plugins/debugger/gdb/gdbengine.cpp | 3 +++ src/plugins/debugger/gdb/gdboptionspage.cpp | 7 +++++++ 4 files changed, 19 insertions(+) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index f2bee6aa84b..41f503028f8 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 85d2ba2bd84..081a11e6f23 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 d25ea82ac46..56e75f4ff03 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 b391389c604..8705bd96e1c 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);