diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index 5c3889a1127..b36c4ddfbce 100644
--- a/src/plugins/debugger/debuggeractions.cpp
+++ b/src/plugins/debugger/debuggeractions.cpp
@@ -321,6 +321,14 @@ DebuggerSettings::DebuggerSettings(QSettings *settings)
item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnCatch"));
insertItem(BreakOnCatch, item);
+ item = new SavedAction(this);
+ item->setText(tr("Break on \"qWarning\""));
+ item->setCheckable(true);
+ item->setDefaultValue(false);
+ item->setValue(false);
+ item->setSettingsKey(debugModeGroup, QLatin1String("BreakOnWarning"));
+ insertItem(BreakOnWarning, item);
+
//
// Settings
//
diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h
index 40502aaa367..9294bb55eca 100644
--- a/src/plugins/debugger/debuggeractions.h
+++ b/src/plugins/debugger/debuggeractions.h
@@ -150,6 +150,7 @@ enum DebuggerActionCode
SelectedPluginBreakpointsPattern,
BreakOnThrow,
BreakOnCatch,
+ BreakOnWarning,
// Registers
AlwaysAdjustRegistersColumnWidths,
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 58eed9bcfe2..c3de36059cb 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -4726,11 +4726,14 @@ void GdbEngine::handleNamespaceExtraction(const GdbResponse &response)
setQtNamespace(ns + "::");
}
- if (startParameters().startMode == AttachCore)
+ if (startParameters().startMode == AttachCore) {
notifyInferiorSetupOk(); // No breakpoints in core files.
- else
+ } else {
postCommand("-break-insert -f '" + qtNamespace() + "qFatal'",
CB(handleBreakOnQFatal));
+ if (debuggerCore()->boolSetting(BreakOnWarning))
+ postCommand("-break-insert -f '" + qtNamespace() + "qWarning'");
+ }
}
void GdbEngine::handleBreakOnQFatal(const GdbResponse &response)
diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp
index ccfa4aa11af..404a92e8c5f 100644
--- a/src/plugins/debugger/gdb/gdboptionspage.cpp
+++ b/src/plugins/debugger/gdb/gdboptionspage.cpp
@@ -94,6 +94,8 @@ QWidget *GdbOptionsPage::createPage(QWidget *parent)
m_ui->checkBoxTargetAsync);
m_group.insert(debuggerCore()->action(AdjustBreakpointLocations),
m_ui->checkBoxAdjustBreakpointLocations);
+ m_group.insert(debuggerCore()->action(BreakOnWarning),
+ m_ui->checkBoxBreakOnWarning);
m_group.insert(debuggerCore()->action(GdbWatchdogTimeout),
m_ui->spinBoxGdbWatchdogTimeout);
diff --git a/src/plugins/debugger/gdb/gdboptionspage.ui b/src/plugins/debugger/gdb/gdboptionspage.ui
index 2abf248de2e..9445a0d837a 100644
--- a/src/plugins/debugger/gdb/gdboptionspage.ui
+++ b/src/plugins/debugger/gdb/gdboptionspage.ui
@@ -123,6 +123,13 @@ on slow machines. In this case, the value should be increased.
-
+
+
+ Stop when a qWarning is issued
+
+
+
+ -
<html><head/><body><p>Selecting this enables reverse debugging.</p><.p><b>Note:</b>This feature is very slow and unstable on the GDB side. It exhibits unpredictable behaviour when going backwards over system calls and is very likely to destroy your debugging session.</p><body></html>
diff --git a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp
index a81eeb51d34..c76c7fa54f4 100644
--- a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp
+++ b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp
@@ -2612,6 +2612,13 @@ void testEigen()
#endif
}
+// http://bugreports.qt.nokia.com/browse/QTCREATORBUG-842
+void test842()
+{
+ qWarning("Test");
+ int x = 0;
+ ++x;
+}
// http://bugreports.qt.nokia.com/browse/QTCREATORBUG-4019
class A4019
@@ -2654,8 +2661,9 @@ void test4497()
int main(int argc, char *argv[])
{
- //test4497();
+ test842();
test4019();
+ //test4497();
testEigen();
testKR();
int *x = new int(32);