diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 898a746af9364cb39d4c002e65008c81c4e8066a..619b109811453e30547d09297ce22d9ad1b83295 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -555,18 +555,21 @@ void GdbEngine::handleResponse(const QByteArray &buff) break; QByteArray resultClass = QByteArray::fromRawData(from, inner - from); - if (resultClass == "done") + if (resultClass == "done") { response.resultClass = GdbResultDone; - else if (resultClass == "running") + } else if (resultClass == "running") { + setState(InferiorRunning); + showStatusMessage(tr("Running...")); response.resultClass = GdbResultRunning; - else if (resultClass == "connected") + } else if (resultClass == "connected") { response.resultClass = GdbResultConnected; - else if (resultClass == "error") + } else if (resultClass == "error") { response.resultClass = GdbResultError; - else if (resultClass == "exit") + } else if (resultClass == "exit") { response.resultClass = GdbResultExit; - else + } else { response.resultClass = GdbResultUnknown; + } from = inner; if (from != to) { @@ -1422,12 +1425,11 @@ void GdbEngine::handleFileExecAndSymbols(const GdbResponse &response) void GdbEngine::handleExecContinue(const GdbResponse &response) { - QTC_ASSERT(state() == InferiorRunningRequested, /**/); if (response.resultClass == GdbResultRunning) { - setState(InferiorRunning); - showStatusMessage(tr("Running..."), 5000); - } else { - QTC_ASSERT(response.resultClass == GdbResultError, /**/); + // The "running" state is picked up in handleResponse() + QTC_ASSERT(state() == InferiorRunning, /**/); + } else if (response.resultClass == GdbResultError) { + QTC_ASSERT(state() == InferiorRunningRequested, /**/); const QByteArray &msg = response.data.findChild("msg").data(); if (msg == "Cannot find bounds of current function") { setState(InferiorStopped); @@ -1441,6 +1443,8 @@ void GdbEngine::handleExecContinue(const GdbResponse &response) QTC_ASSERT(state() == InferiorRunning, /**/); shutdown(); } + } else { + QTC_ASSERT(false, /**/); } } @@ -4150,7 +4154,7 @@ void GdbEngine::handleInferiorStartFailed(const QString &msg) void GdbEngine::handleInferiorStarted() { - QTC_ASSERT(state() == InferiorRunningRequested + QTC_ASSERT(state() == InferiorRunning || state() == InferiorStopped, qDebug() << state()); debugMessage(_("INFERIOR STARTED")); if (state() == InferiorStopped) diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp index d7765e58cc11b39c6868190b3f3d73734ab34b21..ba657427a6c6b96973a05f966c799b63d925f317 100644 --- a/src/plugins/debugger/gdb/plaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp @@ -209,11 +209,11 @@ void PlainGdbAdapter::handleInfoTarget(const GdbResponse &response) void PlainGdbAdapter::handleExecRun(const GdbResponse &response) { - QTC_ASSERT(state() == InferiorRunningRequested, qDebug() << state()); if (response.resultClass == GdbResultRunning) { + QTC_ASSERT(state() == InferiorRunning, qDebug() << state()); emit inferiorStarted(); - setState(InferiorRunning); } else { + QTC_ASSERT(state() == InferiorRunningRequested, qDebug() << state()); QTC_ASSERT(response.resultClass == GdbResultError, /**/); const QByteArray &msg = response.data.findChild("msg").data(); //QTC_ASSERT(status() == InferiorRunning, /**/);