diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index f4d2576e85d7eebe6bb471afc22f019617ded011..16028e0a33cb5d716975fc10b80356cc70f87ebb 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1048,13 +1048,16 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
         return;
     }
 
+    bool initHelpers = true;
     if (state() == InferiorRunning) {
         // Stop triggered by a breakpoint or otherwise not directly
         // initiated by the user.
         setState(InferiorStopping);
     } else {
-        QTC_ASSERT(state() == InferiorStopping || state() == InferiorStarting,
-                   qDebug() << state());
+        if (state() == InferiorStarting)
+            initHelpers = false;
+        else
+            QTC_ASSERT(state() == InferiorStopping, qDebug() << state());
     }
     setState(InferiorStopped);
 
@@ -1116,9 +1119,10 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
     }
 
     if (isStoppedReason(reason) || reason.isEmpty()) {
+        if (initHelpers && m_debuggingHelperState != DebuggingHelperUninitialized)
+            initHelpers = false;
         // Don't load helpers on stops triggered by signals unless it's
         // an intentional trap.
-        bool initHelpers = m_debuggingHelperState == DebuggingHelperUninitialized;
         if (initHelpers && reason == "signal-received"
                 && data.findChild("signal-name").data() != "SIGTRAP")
             initHelpers = false;