summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-08-13 14:33:02 +0200
committerhjk <qtc-committer@nokia.com>2009-08-13 15:01:57 +0200
commit6fd0433cd6593882eeeb899d43ca01de50b95829 (patch)
treee3e7bc19b7a0dc91645219db913a1f32bd0c79fa /src
parent21c3e014b995626398d16e0e7d2f642754ef1cec (diff)
downloadqt-creator-6fd0433cd6593882eeeb899d43ca01de50b95829.tar.gz
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.
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/commonoptionspage.ui7
-rw-r--r--src/plugins/debugger/debuggeractions.cpp14
-rw-r--r--src/plugins/debugger/debuggeractions.h1
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp2
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp19
5 files changed, 37 insertions, 6 deletions
diff --git a/src/plugins/debugger/commonoptionspage.ui b/src/plugins/debugger/commonoptionspage.ui
index 9512db33aa..249ccaca91 100644
--- a/src/plugins/debugger/commonoptionspage.ui
+++ b/src/plugins/debugger/commonoptionspage.ui
@@ -28,6 +28,13 @@
</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">
<string>Use alternating row colors in debug views</string>
diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index 693dcf4e66..0617307ba7 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 a0ccf46c00..fa283bde6a 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 6b4610e49f..d960632758 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 d7ab3f5939..a327bf9ad5 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()