From cf62837fab55331217b3c7eb87c9ca84d36117ad Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 30 May 2011 16:01:50 +0200 Subject: [PATCH] debugger: implement an option to stop on qWarnings (gdb only) Task-number: QTCREATORBUG-842 Change-Id: If1a7d0cd9dfaa5b6b4915fa67a150683cf6786b9 Reviewed-on: http://codereview.qt.nokia.com/226 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/debugger/debuggeractions.cpp | 8 ++++++++ src/plugins/debugger/debuggeractions.h | 1 + src/plugins/debugger/gdb/gdbengine.cpp | 7 +++++-- src/plugins/debugger/gdb/gdboptionspage.cpp | 2 ++ src/plugins/debugger/gdb/gdboptionspage.ui | 7 +++++++ tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp | 10 +++++++++- 6 files changed, 32 insertions(+), 3 deletions(-) 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);