diff --git a/src/plugins/debugger/commonoptionspage.ui b/src/plugins/debugger/commonoptionspage.ui index 9512db33aaa96cd5be813919a1c31c195d95cc06..249ccaca91796341f56fb1df4784116aeca92e54 100644 --- a/src/plugins/debugger/commonoptionspage.ui +++ b/src/plugins/debugger/commonoptionspage.ui @@ -27,6 +27,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="checkBoxUseMessageBoxForSignals"> + <property name="text"> + <string>Show a message box when receiving a signal</string> + </property> + </widget> + </item> <item> <widget class="QCheckBox" name="checkBoxUseAlternatingRowColors"> <property name="text"> diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 693dcf4e6617ddf524d1acb4ffea165478b9a89c..0617307ba72a904511fd2600f349c2dccaa849a0 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -122,13 +122,13 @@ DebuggerSettings *DebuggerSettings::instance() // View // item = new SavedAction(instance); - instance->insertItem(AdjustColumnWidths, item); item->setText(tr("Adjust column widths to contents")); + instance->insertItem(AdjustColumnWidths, item); item = new SavedAction(instance); - instance->insertItem(AlwaysAdjustColumnWidths, item); item->setText(tr("Always adjust column widths to contents")); item->setCheckable(true); + instance->insertItem(AlwaysAdjustColumnWidths, item); item = new SavedAction(instance); item->setText(tr("Use alternating row colors")); @@ -138,8 +138,16 @@ DebuggerSettings *DebuggerSettings::instance() instance->insertItem(UseAlternatingRowColors, item); item = new SavedAction(instance); - item->setSettingsKey(debugModeGroup, QLatin1String("LogTimeStamps")); + item->setText(tr("Show a message box when receiving a signal")); + item->setSettingsKey(debugModeGroup, QLatin1String("UseMessageBoxForSignals")); + item->setCheckable(true); + item->setDefaultValue(true); + item->setValue(true); + instance->insertItem(UseMessageBoxForSignals, item); + + item = new SavedAction(instance); item->setText(tr("Log time stamps")); + item->setSettingsKey(debugModeGroup, QLatin1String("LogTimeStamps")); item->setCheckable(true); item->setDefaultValue(false); instance->insertItem(LogTimeStamps, item); diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index a0ccf46c0058142ebf4287de2b16667222f88e02..fa283bde6ad9f573ef27a6a3d744ddd2b10e87d3 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -77,6 +77,7 @@ enum DebuggerActionCode AdjustColumnWidths, AlwaysAdjustColumnWidths, UseAlternatingRowColors, + UseMessageBoxForSignals, AutoQuit, LockView, LogTimeStamps, diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 6b4610e49f8a2e57b02d2bdcacd54e05bff631d6..d96063275832692da39b901fce35ecc7fd0213ac 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -294,6 +294,8 @@ QWidget *CommonOptionsPage::createPage(QWidget *parent) m_ui.checkBoxListSourceFiles); m_group.insert(theDebuggerAction(UseAlternatingRowColors), m_ui.checkBoxUseAlternatingRowColors); + m_group.insert(theDebuggerAction(UseMessageBoxForSignals), + m_ui.checkBoxUseMessageBoxForSignals); m_group.insert(theDebuggerAction(SkipKnownFrames), m_ui.checkBoxSkipKnownFrames); m_group.insert(theDebuggerAction(UseToolTips), diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index d7ab3f59391067c15fa7cb7029ad42b51239e42e..a327bf9ad5efb4e929ffd6f85cfdac07eae66725 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -790,7 +790,7 @@ void GdbEngine::handleResultRecord(const GdbResultRecord &record) if (record.token < m_oldestAcceptableToken && (cmd.flags & Discardable)) { //qDebug() << "### SKIPPING OLD RESULT" << record.toString(); - //QMessageBox::information(m_mainWindow, tr("Skipped"), "xxx"); + //QMessageBox::information(q->mainWindow(), tr("Skipped"), "xxx"); return; } @@ -1186,6 +1186,19 @@ void GdbEngine::handleAsyncOutput(const GdbMi &data) } } #endif + if (reason == "signal-received" + && theDebuggerBoolSetting(UseMessageBoxForSignals)) { + QByteArray name = data.findChild("signal-name").data(); + QByteArray meaning = data.findChild("signal-meaning").data(); + QString msg = tr("<p>The inferior stopped because it received a " + "signal from the Operating System.<p>" + "<table><tr><td>Signal name : </td><td>%1</td></tr>" + "<tr><td>Signal meaning : </td><td>%2</td></tr></table>") + .arg(name.isEmpty() ? tr(" <Unknown> ") : _(name)) + .arg(meaning.isEmpty() ? tr(" <Unknown> ") : _(meaning)); + QMessageBox::information(q->mainWindow(), tr("Signal received"), msg); + } + if (reason.isEmpty()) q->showStatusMessage(tr("Stopped.")); else @@ -1295,11 +1308,11 @@ void GdbEngine::handleShowVersion(const GdbResultRecord &response, const QVarian "Using gdb 6.7 or later is strongly recommended."); #if 0 // ugly, but 'Show again' check box... - static QErrorMessage *err = new QErrorMessage(m_mainWindow); + static QErrorMessage *err = new QErrorMessage(q->mainWindow()); err->setMinimumSize(400, 300); err->showMessage(msg); #else - //QMessageBox::information(m_mainWindow, tr("Warning"), msg); + //QMessageBox::information(q->mainWindow(), tr("Warning"), msg); #endif } else { m_gdbVersion = 10000 * supported.cap(2).toInt()