From 3488b0446c05bceac571be034ac5cbd9a12fc354 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 26 Nov 2010 14:23:52 +0100 Subject: [PATCH] debugger: fix state after error output to -exec-interrupt Task-number: QTCREATORBUG-2850 --- src/plugins/debugger/gdb/remotegdbserveradapter.cpp | 18 +++++++++++++++--- src/plugins/debugger/gdb/remotegdbserveradapter.h | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index 8a8ad3f8fc..681c3f83c8 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -273,9 +273,21 @@ void RemoteGdbServerAdapter::runEngine() void RemoteGdbServerAdapter::interruptInferior() { - // FIXME: On some gdb versions like git 170ffa5d7dd this produces - // >810^error,msg="mi_cmd_exec_interrupt: Inferior not executing." - m_engine->postCommand("-exec-interrupt", GdbEngine::Immediate); + QTC_ASSERT(state() == InferiorStopRequested, qDebug() << state()); + m_engine->postCommand("-exec-interrupt", GdbEngine::Immediate, + CB(handleInterruptInferior)); +} + +void RemoteGdbServerAdapter::handleInterruptInferior(const GdbResponse &response) +{ + if (response.resultClass == GdbResultDone) { + // The gdb server will trigger extra output that we will pick up + // to do a proper state transition. + } else { + // FIXME: On some gdb versions like git 170ffa5d7dd this produces + // >810^error,msg="mi_cmd_exec_interrupt: Inferior not executing." + m_engine->notifyInferiorStopOk(); + } } void RemoteGdbServerAdapter::shutdownInferior() diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.h b/src/plugins/debugger/gdb/remotegdbserveradapter.h index 749d86e576..e635f4926c 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.h +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.h @@ -86,6 +86,7 @@ private: void handleFileExecAndSymbols(const GdbResponse &response); void callTargetRemote(); void handleTargetRemote(const GdbResponse &response); + void handleInterruptInferior(const GdbResponse &response); const int m_toolChainType; -- 2.11.0