From 0de840cb43bf40cb58530e41e0b1c29397d34827 Mon Sep 17 00:00:00 2001 From: con Date: Wed, 6 Jan 2010 15:42:20 +0100 Subject: [PATCH] debugger: make watchdog timeout configurable (cherry picked from commit bf077800b85fcb598e316f16b1e5dce98eae7ad5) Conflicts: src/plugins/debugger/debuggerplugin.cpp src/plugins/debugger/gdb/gdboptionspage.ui --- src/plugins/debugger/debuggeractions.cpp | 6 +++ src/plugins/debugger/debuggeractions.h | 1 + src/plugins/debugger/debuggerplugin.cpp | 1 + src/plugins/debugger/gdb/gdbengine.cpp | 3 +- src/plugins/debugger/gdb/gdbengine.h | 1 - src/plugins/debugger/gdb/gdboptionspage.cpp | 3 ++ src/plugins/debugger/gdb/gdboptionspage.ui | 52 +++++++++++++++++---- 7 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 38b431696e8..c57118e960e 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -383,6 +383,12 @@ DebuggerSettings *DebuggerSettings::instance() item->setText(tr("Execute line")); instance->insertItem(ExecuteCommand, item); + item = new SavedAction(instance); + item->setSettingsKey(debugModeGroup, QLatin1String("WatchdogTimeout")); + item->setDefaultValue(20); + instance->insertItem(GdbWatchdogTimeout, item); + + return instance; } diff --git a/src/plugins/debugger/debuggeractions.h b/src/plugins/debugger/debuggeractions.h index faa2e3e6b11..bcb23b175ff 100644 --- a/src/plugins/debugger/debuggeractions.h +++ b/src/plugins/debugger/debuggeractions.h @@ -100,6 +100,7 @@ enum DebuggerActionCode GdbEnvironment, GdbScriptFile, ExecuteCommand, + GdbWatchdogTimeout, // Stack MaximalStackDepth, diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 58148c98319..753fc4e48ba 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -359,6 +359,7 @@ QWidget *CommonOptionsPage::createPage(QWidget *parent) m_ui.checkBoxEnableReverseDebugging); m_group.insert(theDebuggerAction(MaximalStackDepth), m_ui.spinBoxMaximalStackDepth); + m_group.insert(theDebuggerAction(GdbWatchdogTimeout), 0); m_group.insert(theDebuggerAction(LogTimeStamps), 0); m_group.insert(theDebuggerAction(UsePreciseBreakpoints), 0); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 6b44001fbae..a2f97db8f28 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -195,7 +195,8 @@ GdbEngine::GdbEngine(DebuggerManager *manager) : m_commandTimer = new QTimer(this); m_commandTimer->setSingleShot(true); - m_commandTimer->setInterval(COMMAND_TIMEOUT); + m_commandTimer->setInterval( + 1000 * qMin(20, theDebuggerAction(GdbWatchdogTimeout)->value().toInt())); connect(m_commandTimer, SIGNAL(timeout()), SLOT(commandTimeout())); // Needs no resetting in initializeVariables() diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 519df6b3171..1d6b1666eb5 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -234,7 +234,6 @@ private: ////////// Gdb Command Management ////////// QHash m_cookieForToken; QTimer *m_commandTimer; - enum { COMMAND_TIMEOUT = 20000 }; QByteArray m_pendingConsoleStreamOutput; QByteArray m_pendingLogStreamOutput; diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp index 44e2624d557..561f2ad0596 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.cpp +++ b/src/plugins/debugger/gdb/gdboptionspage.cpp @@ -52,6 +52,9 @@ QWidget *GdbOptionsPage::createPage(QWidget *parent) m_ui.environmentEdit); m_group.insert(theDebuggerAction(UsePreciseBreakpoints), m_ui.checkBoxUsePreciseBreakpoints); + m_group.insert(theDebuggerAction(GdbWatchdogTimeout), + m_ui.spinBoxGdbWatchdogTimeout); + #if 1 m_ui.groupBoxPluginDebugging->hide(); diff --git a/src/plugins/debugger/gdb/gdboptionspage.ui b/src/plugins/debugger/gdb/gdboptionspage.ui index d2b4c18bcfd..df703a5692c 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.ui +++ b/src/plugins/debugger/gdb/gdboptionspage.ui @@ -6,8 +6,8 @@ 0 0 - 429 - 452 + 397 + 322 @@ -36,6 +36,9 @@ + + + @@ -59,20 +62,53 @@ - - - - - Use full path information to set breakpoints - When this option is checked, the debugger plugin attempts to extract full path information for all source files from gdb. This is a slow process but enables setting breakpoints in files with the same file name in different directories. + + Use full path information to set breakpoints + + + + + + + Gdb timeout: + + + + + + + This is the number of second Qt Creator will wait before +it terminates non-reacting gdb process. The default value of 20 seconds +should be sufficient for most applications, but there are situations when +loading big libraries or listing source files takes much longer than that +on slow machines. In this case the value should be increased. + + + Qt::LeftToRight + + + <unlimited> + + + 20 + + + 1000000 + + + 20 + + + 20 +