diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 6f369baa8e62109949931736ba00633368d481f8..9af66c5edf6ad32d9f9c6fd800f676abfe8cb329 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -297,7 +297,8 @@ void GdbEngine::gdbProcError(QProcess::ProcessError error)
                 "invoked program '%1' is missing, or you may have insufficient "
                 "permissions to invoke the program.")
                 .arg(theDebuggerStringSetting(GdbLocation));
-            emitStartFailed();
+            emit startFailed();
+            shutdown();
             break;
         case QProcess::Crashed:
             kill = false;
diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp
index 851c5edb1d264c7d4b102f7da8757dd8db04cbee..f29def0afdfa0650ac2efdcba643e44d0df65d41 100644
--- a/src/plugins/debugger/gdb/plaingdbadapter.cpp
+++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp
@@ -216,6 +216,13 @@ void PlainGdbAdapter::handleExecRun(const GdbResultRecord &response, const QVari
     }
 }
 
+void PlainGdbAdapter::startInferior()
+{
+    QTC_ASSERT(state() == InferiorPrepared, qDebug() << state());
+    setState(InferiorStarting);
+    m_engine->postCommand(_("-exec-run"), CB(handleExecRun));
+}
+
 void PlainGdbAdapter::interruptInferior()
 {
     debugMessage(_("TRYING TO INTERUPT INFERIOR"));
diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp
index 9be95bf82736e9f8743bfbbdf671b4780933d0b5..acb296d50e5ee44303724b193588dae3c27ebc82 100644
--- a/src/plugins/debugger/gdb/trkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp
@@ -32,7 +32,9 @@
 #ifndef STANDALONE_RUNNER
 #include "gdbengine.h"
 #endif
-#ifndef Q_OS_WIN
+#ifdef Q_OS_WIN
+#  include <windows.h>
+#else
 #  include <sys/types.h>
 #  include <unistd.h>
 #endif