diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 52239c202b8af8eda083be962d132e4d714f1e30..72915e4f6fa70858e4e4ab9b5b54f5947237be6e 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -1178,7 +1178,7 @@ void DebuggerEngine::notifyEngineSetupFailed()
     setState(EngineSetupFailed);
     QTC_ASSERT(d->m_runControl, return);
     d->m_runControl->startFailed();
-    d->queueShutdownEngine();
+    setState(DebuggerFinished);
 }
 
 void DebuggerEngine::notifyEngineSetupOk()
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index c178d8a2ae6f22f40e93caf6bb66c3d1ac3810ea..7b0edfdb2c20542f0fc52df3530411399e9b11da 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -172,6 +172,13 @@
 // Transitions marked by '*' are done asynchronously.
 // The GdbEngine->setupEngine() function is described in more detail below.
 //
+// The engines are responsible for local roll-back to the last
+// acknowledged state before calling notify*Failed. I.e. before calling
+// notifyEngineSetupFailed() any process started during setupEngine()
+// so far must be terminated.
+//
+//
+//
 //                        DebuggerNotReady
 //                               +
 //                      EngineSetupRequested