From 6fd0433cd6593882eeeb899d43ca01de50b95829 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Thu, 13 Aug 2009 14:33:02 +0200 Subject: [PATCH] debugger: pop up a window when the application receives a signal like SIGSEGV Just mentioning it in the status bar is often not enough to take notice. --- src/plugins/debugger/commonoptionspage.ui | 7 +++++++ src/plugins/debugger/debuggeractions.cpp | 14 +++++++++++--- src/plugins/debugger/debuggeractions.h | 1 + src/plugins/debugger/debuggerplugin.cpp | 2 ++ src/plugins/debugger/gdb/gdbengine.cpp | 19 ++++++++++++++++--- 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/plugins/debugger/commonoptionspage.ui b/src/plugins/debugger/commonoptionspage.ui index 9512db33aaa..249ccaca917 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 693dcf4e661..0617307ba72 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 a0ccf46c005..fa283bde6ad 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 6b4610e49f8..d9606327583 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 d7ab3f59391..a327bf9ad5e 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() -- GitLab