diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 520bc5110fb213c8cb80e2965b0290e14b760279..b96c958d132cc381905a217fe1d9b9fb8e527292 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -563,8 +563,12 @@ void CdbEngine::processTerminated(unsigned long exitCode)
 
 bool CdbEnginePrivate::endInferior(bool detachOnly, QString *errorMessage)
 {
+    // Prevent repeated invocation.
+    const bool hasHandles = m_hDebuggeeProcess != NULL;
     if (debugCDBExecution)
-        qDebug("endInferior detach=%d, %s", detachOnly, DebuggerEngine::stateName(m_engine->state()));
+        qDebug("endInferior detach=%d, %s handles=%d", detachOnly, DebuggerEngine::stateName(m_engine->state()), hasHandles);
+    if (!hasHandles)
+        return true;
     // Are we running
     switch (m_engine->state()) {
     case InferiorRunRequested:
@@ -1089,8 +1093,13 @@ void CdbEngine::activateFrame(int frameIndex)
     if (debugCDB)
         qDebug() << Q_FUNC_INFO << frameIndex;
 
-    if (state() != InferiorStopOk) {
-        qWarning("WARNING %s: invoked while debuggee is running\n", Q_FUNC_INFO);
+    switch (state()) {
+    case InferiorStopOk:
+    case InferiorShutdownRequested:
+        break;
+    default:
+        qWarning("WARNING %s: invoked in invalid state %s\n",
+                 Q_FUNC_INFO, DebuggerEngine::stateName(state()));
         return;
     }