diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp
index 0cbb08ea1d1deb2e8cff75b07ea4231033c6149a..f4922e4ab2a98f52865f80465c4e2b59cd0c5972 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 6ea017350b661361b57f93c4c55fd13bd6789ac4..c43d7caae41a789791b9785f3c76eabf3f73d615 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 0684b11d5ac2832d3f698e4244946e07892d5005..00bbd650247893b01a7d07037dea4d6b00e193be 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 e471d4d9791c57cd9e88a1e90b91d5027f617328..f03b07a7004efbbe25035846a39d9389e6ec5287 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 731791d677f02a6a18f0850492cb79a76687dee6..92937913479b47779d7279247c0071e5edb5b380 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 d209f6b12cdce5da089cc5dd7d9d2384b210cae2..67fe0637e2be5fb6fa292c7d79f99e001fe1bced 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 a7c90a2755771036e242ee927f9fd9e052098971..3a46c86fd495a1c0d19e73617b489c1660a3ad28 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>&lt;unlimited&gt;</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>