diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp index e06790e0ab403de7527ba013129d6802a170ae85..91a1a216360ad23c3106eaa9fad561e2a99b4f90 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.cpp +++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp @@ -109,7 +109,7 @@ void AttachGdbAdapter::handleAttach(const GdbResponse &response) debugMessage(_("INFERIOR STARTED")); showStatusMessage(msgAttachedToStoppedInferior()); m_engine->updateAll(); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = __(response.data.findChild("msg").data()); setState(InferiorStartFailed); emit inferiorStartFailed(msg); @@ -154,7 +154,7 @@ void AttachGdbAdapter::handleDetach(const GdbResponse &response) setState(InferiorShutDown); emit inferiorShutDown(); shutdown(); // re-iterate... - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgInferiorStopFailed(__(response.data.findChild("msg").data())); setState(InferiorShutdownFailed); emit inferiorShutdownFailed(msg); @@ -165,7 +165,7 @@ void AttachGdbAdapter::handleExit(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { // don't set state here, this will be handled in handleGdbFinished() - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgGdbStopFailed(__(response.data.findChild("msg").data())); emit adapterShutdownFailed(msg); } diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp index dd4d5725e8ea53a5cae16b197c1ba3d45fa84fc0..c0158caccafc495fea6dfb82d7cccde434ea9586 100644 --- a/src/plugins/debugger/gdb/coregdbadapter.cpp +++ b/src/plugins/debugger/gdb/coregdbadapter.cpp @@ -133,7 +133,6 @@ void CoreGdbAdapter::handleTargetCore1(const GdbResponse &response) m_engine->postCommand(_("detach"), CB(handleDetach1)); } } else { - QTC_ASSERT(response.resultClass == GdbResultError, /**/); const QByteArray msg = response.data.findChild("msg").data(); setState(InferiorStartFailed); emit inferiorStartFailed(msg); @@ -149,7 +148,6 @@ void CoreGdbAdapter::handleDetach1(const GdbResponse &response) m_engine->postCommand(_("-file-exec-and-symbols \"%1\"") .arg(fi.absoluteFilePath()), CB(handleFileExecAndSymbols)); } else { - QTC_ASSERT(response.resultClass == GdbResultError, /**/); const QByteArray msg = response.data.findChild("msg").data(); setState(InferiorStartFailed); emit inferiorStartFailed(msg); @@ -165,7 +163,7 @@ void CoreGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response) QFileInfo fi(startParameters().coreFile); QString coreName = fi.absoluteFilePath(); m_engine->postCommand(_("target core ") + coreName, CB(handleTargetCore2)); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = tr("Symbols not found in \"%1\" failed:\n%2") .arg(__(response.data.findChild("msg").data())); setState(InferiorUnrunnable); @@ -182,7 +180,7 @@ void CoreGdbAdapter::handleTargetCore2(const GdbResponse &response) showStatusMessage(tr("Attached to core.")); setState(InferiorUnrunnable); m_engine->updateAll(); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = tr("Attach to core \"%1\" failed:\n%2") .arg(__(response.data.findChild("msg").data())); setState(InferiorUnrunnable); @@ -220,7 +218,7 @@ void CoreGdbAdapter::handleExit(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { // don't set state here, this will be handled in handleGdbFinished() - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgGdbStopFailed(__(response.data.findChild("msg").data())); emit adapterShutdownFailed(msg); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index e1656eb6d50360bf6e358f3de68820b1ed4c45b6..c9984dcd3629748df84e7c054c511c72a8e76df2 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -811,10 +811,17 @@ void GdbEngine::handleResultRecord(const GdbResponse &response) GdbResponse responseWithCookie = response; responseWithCookie.cookie = cmd.cookie; - if (cmd.callback) - (this->*cmd.callback)(responseWithCookie); - if (cmd.adapterCallback) - (m_gdbAdapter->*cmd.adapterCallback)(responseWithCookie); + if (response.resultClass != GdbResultError && + response.resultClass != ((cmd.flags & RunRequest) ? GdbResultRunning : GdbResultDone)) { + debugMessage(_("UNEXPECTED RESPONSE %1 TO COMMAND %2") + .arg(_(GdbResponse::stringFromResultClass(response.resultClass))) + .arg(cmd.command)); + } else { + if (cmd.callback) + (this->*cmd.callback)(responseWithCookie); + else if (cmd.adapterCallback) + (m_gdbAdapter->*cmd.adapterCallback)(responseWithCookie); + } if (cmd.flags & RebuildModel) { --m_pendingRequests; @@ -1173,7 +1180,7 @@ void GdbEngine::handleStop1(const GdbMi &data) GdbMi frameData = data.findChild("frame"); if (frameData.findChild("func").data() == "_start" && frameData.findChild("from").data() == "/lib/ld-linux.so.2") { - postCommand(_("-exec-continue"), CB(handleExecContinue)); + postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue)); return; } } @@ -1302,7 +1309,7 @@ void GdbEngine::handleFileExecAndSymbols(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { //m_breakHandler->clearBreakMarkers(); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = __(response.data.findChild("msg").data()); showMessageBox(QMessageBox::Critical, tr("Starting executable failed"), msg); QTC_ASSERT(state() == InferiorRunning, /**/); @@ -1316,7 +1323,7 @@ void GdbEngine::handleExecContinue(const GdbResponse &response) if (response.resultClass == GdbResultRunning) { // The "running" state is picked up in handleResponse() QTC_ASSERT(state() == InferiorRunning, /**/); - } else if (response.resultClass == GdbResultError) { + } else { QTC_ASSERT(state() == InferiorRunningRequested, /**/); QByteArray msg = response.data.findChild("msg").data(); if (msg.startsWith("Cannot find bounds of current function")) { @@ -1331,8 +1338,6 @@ void GdbEngine::handleExecContinue(const GdbResponse &response) QTC_ASSERT(state() == InferiorRunning, /**/); shutdown(); } - } else { - QTC_ASSERT(false, /**/); } } @@ -1474,7 +1479,7 @@ void GdbEngine::continueInferiorInternal() m_manager->resetLocation(); setTokenBarrier(); setState(InferiorRunningRequested); - postCommand(_("-exec-continue"), CB(handleExecContinue)); + postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue)); } void GdbEngine::autoContinueInferior() @@ -1496,9 +1501,9 @@ void GdbEngine::stepExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-step"), CB(handleExecContinue)); + postCommand(_("-reverse-step"), RunRequest, CB(handleExecContinue)); else - postCommand(_("-exec-step"), CB(handleExecContinue)); + postCommand(_("-exec-step"), RunRequest, CB(handleExecContinue)); } void GdbEngine::stepIExec() @@ -1508,9 +1513,9 @@ void GdbEngine::stepIExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step by instruction requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-stepi"), CB(handleExecContinue)); + postCommand(_("-reverse-stepi"), RunRequest, CB(handleExecContinue)); else - postCommand(_("-exec-step-instruction"), CB(handleExecContinue)); + postCommand(_("-exec-step-instruction"), RunRequest, CB(handleExecContinue)); } void GdbEngine::stepOutExec() @@ -1519,7 +1524,7 @@ void GdbEngine::stepOutExec() setTokenBarrier(); setState(InferiorRunningRequested); showStatusMessage(tr("Finish function requested..."), 5000); - postCommand(_("-exec-finish"), CB(handleExecContinue)); + postCommand(_("-exec-finish"), RunRequest, CB(handleExecContinue)); } void GdbEngine::nextExec() @@ -1529,14 +1534,14 @@ void GdbEngine::nextExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step next requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-next"), CB(handleExecContinue)); + postCommand(_("-reverse-next"), RunRequest, CB(handleExecContinue)); else { #if 1 - postCommand(_("-exec-next"), CB(handleExecContinue)); + postCommand(_("-exec-next"), RunRequest, CB(handleExecContinue)); #else postCommand(_("tbreak %1:%2").arg(QFileInfo(lastFile).fileName()) .arg(lastLine + 1)); - postCommand(_("-exec-continue"), CB(handleExecContinue)); + postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue)); #endif } } @@ -1548,9 +1553,9 @@ void GdbEngine::nextIExec() setState(InferiorRunningRequested); showStatusMessage(tr("Step next instruction requested..."), 5000); if (manager()->isReverseDebugging()) - postCommand(_("-reverse-nexti"), CB(handleExecContinue)); + postCommand(_("-reverse-nexti"), RunRequest, CB(handleExecContinue)); else - postCommand(_("-exec-next-instruction"), CB(handleExecContinue)); + postCommand(_("-exec-next-instruction"), RunRequest, CB(handleExecContinue)); } void GdbEngine::runToLineExec(const QString &fileName, int lineNumber) @@ -1571,7 +1576,7 @@ void GdbEngine::runToFunctionExec(const QString &functionName) showStatusMessage(tr("Run to function %1 requested...").arg(functionName), 5000); // that should be "^running". We need to handle the resulting // "Stopped" - postCommand(_("-exec-continue"), CB(handleExecContinue)); + postCommand(_("-exec-continue"), RunRequest, CB(handleExecContinue)); //postCommand(_("-exec-continue"), handleExecRunToFunction); } @@ -1851,7 +1856,7 @@ void GdbEngine::handleBreakCondition(const GdbResponse &response) BreakpointData *data = handler->at(index); //qDebug() << "HANDLE BREAK CONDITION" << index << data->condition; data->bpCondition = data->condition; - } else { // GdbResultError + } else { QByteArray msg = response.data.findChild("msg").data(); // happens on Mac if (1 || msg.startsWith("Error parsing breakpoint condition. " @@ -1877,7 +1882,7 @@ void GdbEngine::handleBreakInsert(const GdbResponse &response) //#endif attemptBreakpointSynchronization(); handler->updateMarkers(); - } else { // GdbResultError + } else { const BreakpointData *data = handler->at(index); // Note that it is perfectly correct that the file name is put // in quotes but not escaped. GDB simply is like that. @@ -1967,7 +1972,7 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response) BreakpointData *data = handler->at(index); GdbMi bkpt = response.data.findChild("bkpt"); breakpointDataFromOutput(data, bkpt); - } else { // GdbResultError + } else { qDebug() << "INSERTING BREAKPOINT WITH BASE NAME FAILED. GIVING UP"; BreakpointData *data = handler->at(index); data->bpNumber = _("<unavailable>"); @@ -3128,7 +3133,7 @@ void GdbEngine::handleVarCreate(const GdbResponse &response) // data.setValue(QString()); insertData(data); } - } else if (response.resultClass == GdbResultError) { + } else { data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data())); if (data.isWatcher()) { data.value = strNotInScope; @@ -3151,7 +3156,7 @@ void GdbEngine::handleEvaluateExpression(const GdbResponse &response) // data.name = response.data.findChild("value").data(); //else setWatchDataValue(data, response.data.findChild("value")); - } else if (response.resultClass == GdbResultError) { + } else { data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data())); } //qDebug() << "HANDLE EVALUATE EXPRESSION:" << data.toString(); @@ -3163,7 +3168,7 @@ void GdbEngine::handleDebuggingHelperSetup(const GdbResponse &response) { //qDebug() << "CUSTOM SETUP RESULT:" << response.toString(); if (response.resultClass == GdbResultDone) { - } else if (response.resultClass == GdbResultError) { + } else { QString msg = QString::fromLocal8Bit(response.data.findChild("msg").data()); //qDebug() << "CUSTOM DUMPER SETUP ERROR MESSAGE:" << msg; showStatusMessage(tr("Custom dumper setup: %1").arg(msg), 10000); @@ -3176,7 +3181,7 @@ void GdbEngine::handleDebuggingHelperValue1(const GdbResponse &response) QTC_ASSERT(data.isValid(), return); if (response.resultClass == GdbResultDone) { // ignore this case, data will follow - } else if (response.resultClass == GdbResultError) { + } else { QString msg = QString::fromLocal8Bit(response.data.findChild("msg").data()); #ifdef QT_DEBUG // Make debugging of dumpers easier @@ -3347,7 +3352,7 @@ void GdbEngine::handleDebuggingHelperValue3(const GdbResponse &response) data.setAllUnneeded(); insertData(data); } - } else if (response.resultClass == GdbResultError) { + } else { WatchData data = response.cookie.value<WatchData>(); data.setError(strNotInScope); data.setAllUnneeded(); @@ -3460,7 +3465,7 @@ void GdbEngine::handleStackListArguments(const GdbResponse &response) const GdbMi frame = list.findChild("frame"); const GdbMi args = frame.findChild("args"); m_currentFunctionArgs = args.children(); - } else if (response.resultClass == GdbResultError) { + } else { qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen" << response.toString(); } @@ -3705,10 +3710,8 @@ void GdbEngine::handleVarListChildren(const GdbResponse &response) // this skips the spurious "public", "private" etc levels // gdb produces } - } else if (response.resultClass == GdbResultError) { - data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data())); } else { - data.setError(tr("Unknown error: ") + QString::fromLocal8Bit(response.toString())); + data.setError(QString::fromLocal8Bit(response.data.findChild("msg").data())); } } @@ -4024,7 +4027,7 @@ void GdbEngine::handleFetchDisassemblerByLine(const GdbResponse &response) fetchDisassemblerByAddress(ac.agent, true); else ac.agent->setContents(parseDisassembler(lines)); - } else if (response.resultClass == GdbResultError) { + } else { // 536^error,msg="mi_cmd_disassemble: Invalid line number" QByteArray msg = response.data.findChild("msg").data(); if (msg == "mi_cmd_disassemble: Invalid line number") diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 56b4aefb883a84998a0f772084a2e8b9e594186a..81b6952c045aa6ee5f6291561545b456133807c4 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -176,7 +176,8 @@ public: // otherwise the Qt flag macros are unhappy Discardable = 2, RebuildModel = 4, WatchUpdate = Discardable | RebuildModel, - EmbedToken = 8 + EmbedToken = 8, + RunRequest = 16 }; Q_DECLARE_FLAGS(GdbCommandFlags, GdbCommandFlag) diff --git a/src/plugins/debugger/gdb/gdbmi.cpp b/src/plugins/debugger/gdb/gdbmi.cpp index a805df94df7676b240cf75b5093deb9dc5c2ffb7..ffac5d76d1588b2ef84b94aa22936780d39bca41 100644 --- a/src/plugins/debugger/gdb/gdbmi.cpp +++ b/src/plugins/debugger/gdb/gdbmi.cpp @@ -362,7 +362,7 @@ GdbMi GdbMi::findChild(const char *name) const // ////////////////////////////////////////////////////////////////////////////////// -QByteArray stringFromResultClass(GdbResultClass resultClass) +QByteArray GdbResponse::stringFromResultClass(GdbResultClass resultClass) { switch (resultClass) { case GdbResultDone: return "done"; diff --git a/src/plugins/debugger/gdb/gdbmi.h b/src/plugins/debugger/gdb/gdbmi.h index c23239cafcabd33706b744d35d81b7d787c1332a..24295afea662b32d148f929257f61ac342dedf8a 100644 --- a/src/plugins/debugger/gdb/gdbmi.h +++ b/src/plugins/debugger/gdb/gdbmi.h @@ -160,6 +160,7 @@ class GdbResponse public: GdbResponse() : token(-1), resultClass(GdbResultUnknown) {} QByteArray toString() const; + static QByteArray stringFromResultClass(GdbResultClass resultClass); int token; GdbResultClass resultClass; diff --git a/src/plugins/debugger/gdb/plaingdbadapter.cpp b/src/plugins/debugger/gdb/plaingdbadapter.cpp index c0fdea894874dc920c0059bd02e48a29d266943f..8cbfd89b6eebaff30b90d2141334540bc1681332 100644 --- a/src/plugins/debugger/gdb/plaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/plaingdbadapter.cpp @@ -122,7 +122,7 @@ void PlainGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response) //m_breakHandler->clearBreakMarkers(); setState(InferiorPrepared); emit inferiorPrepared(); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = tr("Starting executable failed:\n") + __(response.data.findChild("msg").data()); setState(InferiorPreparationFailed); @@ -138,7 +138,6 @@ void PlainGdbAdapter::handleExecRun(const GdbResponse &response) showStatusMessage(msgInferiorStarted()); } else { QTC_ASSERT(state() == InferiorRunningRequested, qDebug() << state()); - QTC_ASSERT(response.resultClass == GdbResultError, /**/); const QByteArray &msg = response.data.findChild("msg").data(); //QTC_ASSERT(status() == InferiorRunning, /**/); //interruptInferior(); @@ -151,7 +150,7 @@ void PlainGdbAdapter::startInferior() { QTC_ASSERT(state() == InferiorStarting, qDebug() << state()); setState(InferiorRunningRequested); - m_engine->postCommand(_("-exec-run"), CB(handleExecRun)); + m_engine->postCommand(_("-exec-run"), GdbEngine::RunRequest, CB(handleExecRun)); } void PlainGdbAdapter::interruptInferior() @@ -218,7 +217,7 @@ void PlainGdbAdapter::handleKill(const GdbResponse &response) setState(InferiorShutDown); emit inferiorShutDown(); shutdown(); // re-iterate... - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgInferiorStopFailed(__(response.data.findChild("msg").data())); setState(InferiorShutdownFailed); emit inferiorShutdownFailed(msg); @@ -229,7 +228,7 @@ void PlainGdbAdapter::handleExit(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { // don't set state here, this will be handled in handleGdbFinished() - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgGdbStopFailed(__(response.data.findChild("msg").data())); emit adapterShutdownFailed(msg); } diff --git a/src/plugins/debugger/gdb/remotegdbadapter.cpp b/src/plugins/debugger/gdb/remotegdbadapter.cpp index 0b386f8b0f60e473a1c032c9a90c00700c88b55e..5e16587d188f2e9e5213b26d14cfc7acb721a8ee 100644 --- a/src/plugins/debugger/gdb/remotegdbadapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbadapter.cpp @@ -184,7 +184,7 @@ void RemoteGdbAdapter::handleSetTargetAsync(const GdbResponse &response) QString fileName = fi.absoluteFilePath(); m_engine->postCommand(_("-file-exec-and-symbols \"%1\"").arg(fileName), CB(handleFileExecAndSymbols)); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = tr("Adapter too old: does not support asynchronous mode."); setState(InferiorPreparationFailed); emit inferiorPreparationFailed(msg); @@ -198,7 +198,7 @@ void RemoteGdbAdapter::handleFileExecAndSymbols(const GdbResponse &response) //m_breakHandler->clearBreakMarkers(); m_engine->setState(InferiorPrepared); emit inferiorPrepared(); - } else if (response.resultClass == GdbResultError) { + } else { QString msg = tr("Starting remote executable failed:\n"); msg += __(response.data.findChild("msg").data()); setState(InferiorPreparationFailed); @@ -215,7 +215,7 @@ void RemoteGdbAdapter::handleTargetRemote(const GdbResponse &record) showStatusMessage(msgAttachedToStoppedInferior()); setState(InferiorStopped); m_engine->continueInferior(); - } else if (record.resultClass == GdbResultError) { + } else { // 16^error,msg="hd:5555: Connection timed out." QString msg = msgConnectRemoteServerFailed(__(record.data.findChild("msg").data())); setState(InferiorPreparationFailed); @@ -271,7 +271,7 @@ void RemoteGdbAdapter::handleKill(const GdbResponse &response) setState(InferiorShutDown); emit inferiorShutDown(); shutdown(); // re-iterate... - } else if (response.resultClass == GdbResultError) { + } else { QString msg = msgInferiorStopFailed(__(response.data.findChild("msg").data())); setState(InferiorShutdownFailed); emit inferiorShutdownFailed(msg); @@ -282,7 +282,7 @@ void RemoteGdbAdapter::handleExit(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { // don't set state here, this will be handled in handleGdbFinished() - } else if (response.resultClass == GdbResultError) { + } else { QString msg = msgGdbStopFailed(__(response.data.findChild("msg").data())); emit adapterShutdownFailed(msg); } diff --git a/src/plugins/debugger/gdb/trkgdbadapter.cpp b/src/plugins/debugger/gdb/trkgdbadapter.cpp index 502f9a60fe1a2699fd90ad2336ede0337fe9f6ca..2a994f8c51f53dfb7761a71c3de76ff3543c0ded 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.cpp +++ b/src/plugins/debugger/gdb/trkgdbadapter.cpp @@ -1679,7 +1679,7 @@ void TrkGdbAdapter::handleTargetRemote(const GdbResponse &record) if (record.resultClass == GdbResultDone) { setState(InferiorPrepared); emit inferiorPrepared(); - } else if (record.resultClass == GdbResultError) { + } else { QString msg = tr("Connecting to trk server adapter failed:\n") + _(record.data.findChild("msg").data()); emit inferiorPreparationFailed(msg); @@ -1699,7 +1699,7 @@ void TrkGdbAdapter::handleFirstContinue(const GdbResponse &record) if (record.resultClass == GdbResultDone) { debugMessage(_("INFERIOR STARTED")); showStatusMessage(msgInferiorRunning()); - } else if (record.resultClass == GdbResultError) { + } else { emit inferiorStartFailed(msgConnectRemoteServerFailed(record.toString())); } } @@ -2076,7 +2076,7 @@ void TrkGdbAdapter::handleKill(const GdbResponse &response) setState(InferiorShutDown); emit inferiorShutDown(); shutdown(); // re-iterate... - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgInferiorStopFailed(__(response.data.findChild("msg").data())); setState(InferiorShutdownFailed); emit inferiorShutdownFailed(msg); @@ -2088,7 +2088,7 @@ void TrkGdbAdapter::handleExit(const GdbResponse &response) if (response.resultClass == GdbResultDone) { qDebug() << "EXITED, NO MESSAGE..."; // don't set state here, this will be handled in handleGdbFinished() - } else if (response.resultClass == GdbResultError) { + } else { const QString msg = msgGdbStopFailed(__(response.data.findChild("msg").data())); emit adapterShutdownFailed(msg); }