From bf077800b85fcb598e316f16b1e5dce98eae7ad5 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Wed, 9 Dec 2009 15:23:49 +0100 Subject: [PATCH] debugger: make watchdog timeout configurable --- 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 | 54 +++++++++++++++++++-- 7 files changed, 62 insertions(+), 7 deletions(-) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 0cbb08ea1d1..f4922e4ab2a 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -399,6 +399,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 6ea017350b6..c43d7caae41 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 0684b11d5ac..00bbd650247 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -362,6 +362,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(ShowStdNamespace), 0); m_group.insert(theDebuggerAction(ShowQtNamespace), 0); m_group.insert(theDebuggerAction(LogTimeStamps), 0); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index e471d4d9791..f03b07a7004 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -194,7 +194,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 731791d677f..92937913479 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -235,7 +235,6 @@ private: ////////// Gdb Command Management ////////// QHash<int, GdbCommand> 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 d209f6b12cd..67fe0637e2b 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.cpp +++ b/src/plugins/debugger/gdb/gdboptionspage.cpp @@ -51,6 +51,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 a7c90a27557..3a46c86fd49 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.ui +++ b/src/plugins/debugger/gdb/gdboptionspage.ui @@ -2,6 +2,14 @@ <ui version="4.0"> <class>GdbOptionsPage</class> <widget class="QWidget" name="GdbOptionsPage"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>397</width> + <height>322</height> + </rect> + </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QGroupBox" name="groupBoxLocations"> @@ -29,7 +37,7 @@ </widget> </item> <item row="0" column="1"> - <widget class="Utils::PathChooser" name="gdbLocationChooser"/> + <widget class="Utils::PathChooser" name="gdbLocationChooser" native="true"/> </item> <item row="1" column="0"> <widget class="QLabel" name="labelEnvironment"> @@ -55,19 +63,55 @@ </widget> </item> <item row="2" column="1"> - <widget class="Utils::PathChooser" name="scriptFileChooser"/> + <widget class="Utils::PathChooser" name="scriptFileChooser" native="true"/> </item> <item row="3" column="0" colspan="2"> <widget class="QCheckBox" name="checkBoxUsePreciseBreakpoints"> - <property name="text"> - <string>Use full path information to set breakpoints</string> - </property> <property name="toolTip"> <string>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.</string> </property> + <property name="text"> + <string>Use full path information to set breakpoints</string> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="labelGdbWatchdogTimeout"> + <property name="text"> + <string>Gdb timeout:</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QSpinBox" name="spinBoxGdbWatchdogTimeout"> + <property name="toolTip"> + <string>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.</string> + </property> + <property name="layoutDirection"> + <enum>Qt::LeftToRight</enum> + </property> + <property name="specialValueText"> + <string><unlimited></string> + </property> + <property name="minimum"> + <number>20</number> + </property> + <property name="maximum"> + <number>1000000</number> + </property> + <property name="singleStep"> + <number>20</number> + </property> + <property name="value"> + <number>20</number> + </property> </widget> </item> </layout> -- GitLab