diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 9c52ad0b9ed..6d64a7e4409 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -840,17 +840,9 @@ void CdbEngine::shutdownEngine() } } -void CdbEngine::abortDebugger() +void CdbEngine::abortDebuggerProcess() { - if (isDying()) { - // We already tried. Try harder. - showMessage("ABORTING DEBUGGER. SECOND TIME."); - m_process.kill(); - } else { - // Be friendly the first time. This will change targetState(). - showMessage("ABORTING DEBUGGER. FIRST TIME."); - quitDebugger(); - } + m_process.kill(); } void CdbEngine::processFinished() diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index 30bccb4a116..7a80e48dbac 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -70,7 +70,7 @@ public: void runEngine() override; void shutdownInferior() override; void shutdownEngine() override; - void abortDebugger() override; + void abortDebuggerProcess() override; void detachDebugger() override; bool hasCapability(unsigned cap) const override; void watchPoint(const QPoint &) override; diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 47a62484173..671296d92e6 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1353,8 +1353,17 @@ void DebuggerEngine::quitDebugger() void DebuggerEngine::abortDebugger() { - // Overridden in e.g. GdbEngine. - quitDebugger(); + if (!isDying()) { + // Be friendly the first time. This will change targetState(). + showMessage("ABORTING DEBUGGER. FIRST TIME."); + quitDebugger(); + } else { + // We already tried. Try harder. + showMessage("ABORTING DEBUGGER. SECOND TIME."); + abortDebuggerProcess(); + if (runControl()) + runControl()->initiateFinish(); + } } void DebuggerEngine::requestInterruptInferior() diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index f29b0318cfe..549f2b10cd8 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -360,7 +360,8 @@ public: virtual void resetLocation(); virtual void gotoLocation(const Internal::Location &location); virtual void quitDebugger(); // called when pressing the stop button - virtual void abortDebugger(); // called from the debug menu action + + void abortDebugger(); // called from the debug menu action void updateViews(); bool isSlaveEngine() const; @@ -450,6 +451,8 @@ protected: virtual void frameUp(); virtual void frameDown(); + virtual void abortDebuggerProcess() {} // second attempt + virtual void doUpdateLocals(const UpdateParameters ¶ms); void setMasterEngine(DebuggerEngine *masterEngine); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index cdd689cd46a..ece1d1c87c4 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4062,17 +4062,9 @@ void GdbEngine::handleGdbFinished(int exitCode, QProcess::ExitStatus exitStatus) notifyDebuggerProcessFinished(exitCode, exitStatus, "GDB"); } -void GdbEngine::abortDebugger() +void GdbEngine::abortDebuggerProcess() { - if (isDying()) { - // We already tried. Try harder. - showMessage("ABORTING DEBUGGER. SECOND TIME."); - m_gdbProc.kill(); - } else { - // Be friendly the first time. This will change targetState(). - showMessage("ABORTING DEBUGGER. FIRST TIME."); - quitDebugger(); - } + m_gdbProc.kill(); } void GdbEngine::resetInferior() diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index c7122340f06..a7537cfdebd 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -83,7 +83,7 @@ private: ////////// General Interface ////////// bool hasCapability(unsigned) const final; void detachDebugger() final; void shutdownInferior() final; - void abortDebugger() final; + void abortDebuggerProcess() final; void resetInferior() final; bool acceptsDebuggerCommands() const final; diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index c1c1225bdd4..6cc5234b3c2 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -160,17 +160,9 @@ void LldbEngine::shutdownEngine() notifyEngineShutdownOk(); } -void LldbEngine::abortDebugger() +void LldbEngine::abortDebuggerProcess() { - if (isDying()) { - // We already tried. Try harder. - showMessage("ABORTING DEBUGGER. SECOND TIME."); - m_lldbProc.kill(); - } else { - // Be friendly the first time. This will change targetState(). - showMessage("ABORTING DEBUGGER. FIRST TIME."); - quitDebugger(); - } + m_lldbProc.kill(); } void LldbEngine::setupEngine() diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index 19932d56c76..dff437497b6 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -78,7 +78,7 @@ private: void runEngine() override; void shutdownInferior() override; void shutdownEngine() override; - void abortDebugger() override; + void abortDebuggerProcess() override; bool canHandleToolTip(const DebuggerToolTipContext &) const override; diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index 63ff26c1565..a5a9810b9ba 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -410,10 +410,10 @@ void QmlCppEngine::quitDebugger() m_cppEngine->quitDebugger(); } -void QmlCppEngine::abortDebugger() +void QmlCppEngine::abortDebuggerProcess() { EDEBUG("\nMASTER ABORT DEBUGGER"); - m_cppEngine->abortDebugger(); + m_cppEngine->abortDebuggerProcess(); } void QmlCppEngine::setState(DebuggerState newState, bool forced) diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index 38a3c00d566..9dcfb3284a4 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -112,7 +112,7 @@ protected: void shutdownInferior() override; void shutdownEngine() override; void quitDebugger() override; - void abortDebugger() override; + void abortDebuggerProcess() override; void loadAdditionalQmlStack() override;