diff options
author | hjk <qtc-committer@nokia.com> | 2010-07-20 18:31:35 +0200 |
---|---|---|
committer | hjk <qtc-committer@nokia.com> | 2010-07-20 18:54:50 +0200 |
commit | 753a28ed4e6c47c8e926f21c994edce55e2b6cf9 (patch) | |
tree | 28f1d4fa04de915d2891df7aa1ba5b0f30124b62 | |
parent | 62060ce79c840cbe290125023a05bc150ea12e82 (diff) | |
download | qt-creator-753a28ed4e6c47c8e926f21c994edce55e2b6cf9.tar.gz |
debugger: make debugger restartable using the buttons in the application output pane
-rw-r--r-- | src/plugins/debugger/debuggerengine.cpp | 24 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerengine.h | 1 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerrunner.cpp | 1 |
3 files changed, 20 insertions, 6 deletions
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index fa740f1e59..213f6c81dc 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -685,8 +685,6 @@ void DebuggerEngine::startDebugger(DebuggerRunControl *runControl) d->m_runControl = runControl; - QTC_ASSERT(state() == DebuggerNotReady, qDebug() << state()); - d->m_inferiorPid = d->m_startParameters.attachPID > 0 ? d->m_startParameters.attachPID : 0; @@ -700,7 +698,10 @@ void DebuggerEngine::startDebugger(DebuggerRunControl *runControl) theDebuggerAction(OperateByInstruction) ->setEnabled(engineCapabilities & DisassemblerCapability); + QTC_ASSERT(state() == DebuggerNotReady || state() == DebuggerFinished, + qDebug() << state()); setState(EngineSetupRequested); + setupEngine(); } @@ -870,8 +871,15 @@ void DebuggerEngine::addToWatchWindow() } // Called from RunControl. +void DebuggerEngine::handleStartFailed() +{ + d->m_runControl = 0; +} + +// Called from RunControl. void DebuggerEngine::handleFinished() { + d->m_runControl = 0; modulesHandler()->removeAll(); stackHandler()->removeAll(); threadsHandler()->removeAll(); @@ -983,7 +991,7 @@ static bool isAllowedTransition(DebuggerState from, DebuggerState to) case EngineSetupRequested: return to == EngineSetupOk || to == EngineSetupFailed; case EngineSetupFailed: - // FIXME: In therory it's the engine's task to go into a + // FIXME: In therory it's the engine's task to go into a // proper "Shutdown" state before calling notifyEngineSetupFailed //return to == DebuggerFinished; return to == EngineShutdownRequested; @@ -1034,7 +1042,7 @@ static bool isAllowedTransition(DebuggerState from, DebuggerState to) return to == DebuggerFinished; case DebuggerFinished: - return false; + return to == EngineSetupRequested; // Happens on restart. } qDebug() << "UNKNOWN STATE:" << from; @@ -1046,7 +1054,9 @@ void DebuggerEngine::notifyEngineSetupFailed() showMessage(_("NOTE: ENGINE SETUP FAILED")); QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); setState(EngineSetupFailed); - d->m_runControl->startFailed(); + QTC_ASSERT(d->m_runControl, /**/); + if (d->m_runControl) + d->m_runControl->startFailed(); d->queueShutdownEngine(); } @@ -1055,7 +1065,9 @@ void DebuggerEngine::notifyEngineSetupOk() showMessage(_("NOTE: ENGINE SETUP OK")); QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); setState(EngineSetupOk); - d->m_runControl->startSuccessful(); + QTC_ASSERT(d->m_runControl, /**/); + if (d->m_runControl) + d->m_runControl->startSuccessful(); showMessage(_("QUEUE: SETUP INFERIOR")); QTimer::singleShot(0, d, SLOT(doSetupInferior())); } diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 1d4845b169..6cd9fb8796 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -213,6 +213,7 @@ public: QAbstractItemModel *sourceFilesModel() const; void handleFinished(); + void handleStartFailed(); bool debuggerActionsEnabled() const; static bool debuggerActionsEnabled(DebuggerState state); void showModuleSymbols(const QString &moduleName, const Symbols &symbols); diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 182eff9c2d..fb49cba4f8 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -470,6 +470,7 @@ void DebuggerRunControl::startFailed() { m_running = false; emit finished(); + engine()->handleStartFailed(); } void DebuggerRunControl::handleStarted() |