forked from qt-creator/qt-creator
Debugger: Centralize abort handling
... and apply even more force on the second trying by forcing ramp down of the runControl itself instead of hoping that it would pick up hints. Change-Id: I9d0f4130cb9a137b91c9fa81c3d255f236f98be0 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -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();
|
m_process.kill();
|
||||||
} else {
|
|
||||||
// Be friendly the first time. This will change targetState().
|
|
||||||
showMessage("ABORTING DEBUGGER. FIRST TIME.");
|
|
||||||
quitDebugger();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CdbEngine::processFinished()
|
void CdbEngine::processFinished()
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public:
|
|||||||
void runEngine() override;
|
void runEngine() override;
|
||||||
void shutdownInferior() override;
|
void shutdownInferior() override;
|
||||||
void shutdownEngine() override;
|
void shutdownEngine() override;
|
||||||
void abortDebugger() override;
|
void abortDebuggerProcess() override;
|
||||||
void detachDebugger() override;
|
void detachDebugger() override;
|
||||||
bool hasCapability(unsigned cap) const override;
|
bool hasCapability(unsigned cap) const override;
|
||||||
void watchPoint(const QPoint &) override;
|
void watchPoint(const QPoint &) override;
|
||||||
|
|||||||
@@ -1353,8 +1353,17 @@ void DebuggerEngine::quitDebugger()
|
|||||||
|
|
||||||
void DebuggerEngine::abortDebugger()
|
void DebuggerEngine::abortDebugger()
|
||||||
{
|
{
|
||||||
// Overridden in e.g. GdbEngine.
|
if (!isDying()) {
|
||||||
|
// Be friendly the first time. This will change targetState().
|
||||||
|
showMessage("ABORTING DEBUGGER. FIRST TIME.");
|
||||||
quitDebugger();
|
quitDebugger();
|
||||||
|
} else {
|
||||||
|
// We already tried. Try harder.
|
||||||
|
showMessage("ABORTING DEBUGGER. SECOND TIME.");
|
||||||
|
abortDebuggerProcess();
|
||||||
|
if (runControl())
|
||||||
|
runControl()->initiateFinish();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerEngine::requestInterruptInferior()
|
void DebuggerEngine::requestInterruptInferior()
|
||||||
|
|||||||
@@ -360,7 +360,8 @@ public:
|
|||||||
virtual void resetLocation();
|
virtual void resetLocation();
|
||||||
virtual void gotoLocation(const Internal::Location &location);
|
virtual void gotoLocation(const Internal::Location &location);
|
||||||
virtual void quitDebugger(); // called when pressing the stop button
|
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();
|
void updateViews();
|
||||||
bool isSlaveEngine() const;
|
bool isSlaveEngine() const;
|
||||||
@@ -450,6 +451,8 @@ protected:
|
|||||||
virtual void frameUp();
|
virtual void frameUp();
|
||||||
virtual void frameDown();
|
virtual void frameDown();
|
||||||
|
|
||||||
|
virtual void abortDebuggerProcess() {} // second attempt
|
||||||
|
|
||||||
virtual void doUpdateLocals(const UpdateParameters ¶ms);
|
virtual void doUpdateLocals(const UpdateParameters ¶ms);
|
||||||
|
|
||||||
void setMasterEngine(DebuggerEngine *masterEngine);
|
void setMasterEngine(DebuggerEngine *masterEngine);
|
||||||
|
|||||||
@@ -4062,17 +4062,9 @@ void GdbEngine::handleGdbFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
|||||||
notifyDebuggerProcessFinished(exitCode, exitStatus, "GDB");
|
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();
|
m_gdbProc.kill();
|
||||||
} else {
|
|
||||||
// Be friendly the first time. This will change targetState().
|
|
||||||
showMessage("ABORTING DEBUGGER. FIRST TIME.");
|
|
||||||
quitDebugger();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GdbEngine::resetInferior()
|
void GdbEngine::resetInferior()
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ private: ////////// General Interface //////////
|
|||||||
bool hasCapability(unsigned) const final;
|
bool hasCapability(unsigned) const final;
|
||||||
void detachDebugger() final;
|
void detachDebugger() final;
|
||||||
void shutdownInferior() final;
|
void shutdownInferior() final;
|
||||||
void abortDebugger() final;
|
void abortDebuggerProcess() final;
|
||||||
void resetInferior() final;
|
void resetInferior() final;
|
||||||
|
|
||||||
bool acceptsDebuggerCommands() const final;
|
bool acceptsDebuggerCommands() const final;
|
||||||
|
|||||||
@@ -160,17 +160,9 @@ void LldbEngine::shutdownEngine()
|
|||||||
notifyEngineShutdownOk();
|
notifyEngineShutdownOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LldbEngine::abortDebugger()
|
void LldbEngine::abortDebuggerProcess()
|
||||||
{
|
{
|
||||||
if (isDying()) {
|
|
||||||
// We already tried. Try harder.
|
|
||||||
showMessage("ABORTING DEBUGGER. SECOND TIME.");
|
|
||||||
m_lldbProc.kill();
|
m_lldbProc.kill();
|
||||||
} else {
|
|
||||||
// Be friendly the first time. This will change targetState().
|
|
||||||
showMessage("ABORTING DEBUGGER. FIRST TIME.");
|
|
||||||
quitDebugger();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LldbEngine::setupEngine()
|
void LldbEngine::setupEngine()
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ private:
|
|||||||
void runEngine() override;
|
void runEngine() override;
|
||||||
void shutdownInferior() override;
|
void shutdownInferior() override;
|
||||||
void shutdownEngine() override;
|
void shutdownEngine() override;
|
||||||
void abortDebugger() override;
|
void abortDebuggerProcess() override;
|
||||||
|
|
||||||
bool canHandleToolTip(const DebuggerToolTipContext &) const override;
|
bool canHandleToolTip(const DebuggerToolTipContext &) const override;
|
||||||
|
|
||||||
|
|||||||
@@ -410,10 +410,10 @@ void QmlCppEngine::quitDebugger()
|
|||||||
m_cppEngine->quitDebugger();
|
m_cppEngine->quitDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlCppEngine::abortDebugger()
|
void QmlCppEngine::abortDebuggerProcess()
|
||||||
{
|
{
|
||||||
EDEBUG("\nMASTER ABORT DEBUGGER");
|
EDEBUG("\nMASTER ABORT DEBUGGER");
|
||||||
m_cppEngine->abortDebugger();
|
m_cppEngine->abortDebuggerProcess();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlCppEngine::setState(DebuggerState newState, bool forced)
|
void QmlCppEngine::setState(DebuggerState newState, bool forced)
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ protected:
|
|||||||
void shutdownInferior() override;
|
void shutdownInferior() override;
|
||||||
void shutdownEngine() override;
|
void shutdownEngine() override;
|
||||||
void quitDebugger() override;
|
void quitDebugger() override;
|
||||||
void abortDebugger() override;
|
void abortDebuggerProcess() override;
|
||||||
|
|
||||||
void loadAdditionalQmlStack() override;
|
void loadAdditionalQmlStack() override;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user