debugger: encapsulate part of the startup logic in the base class

This commit is contained in:
hjk
2010-07-08 14:26:35 +02:00
parent e721b9f70f
commit 85243e19a9
8 changed files with 46 additions and 44 deletions

View File

@@ -608,12 +608,12 @@ void DebuggerEngine::showMessage(const QString &msg, int channel, int timeout) c
void DebuggerEngine::startDebugger(DebuggerRunControl *runControl)
{
QTC_ASSERT(runControl, startFailed(); return);
QTC_ASSERT(!d->m_runControl, startFailed(); return);
QTC_ASSERT(runControl, notifyEngineStartFailed(); return);
QTC_ASSERT(!d->m_runControl, notifyEngineStartFailed(); return);
DebuggerEngine *sessionTemplate = plugin()->sessionTemplate();
QTC_ASSERT(sessionTemplate, startFailed(); return);
QTC_ASSERT(sessionTemplate != this, startFailed(); return);
QTC_ASSERT(sessionTemplate, notifyEngineStartFailed(); return);
QTC_ASSERT(sessionTemplate != this, notifyEngineStartFailed(); return);
breakHandler()->initializeFromTemplate(sessionTemplate->breakHandler());
watchHandler()->initializeFromTemplate(sessionTemplate->watchHandler());
@@ -956,6 +956,18 @@ static bool isAllowedTransition(int from, int to)
return false;
}
void DebuggerEngine::notifyEngineStarted()
{
QTC_ASSERT(state() == EngineStarting, /**/);
setState(EngineStarted);
}
void DebuggerEngine::notifyEngineStartFailed()
{
QTC_ASSERT(state() == EngineStarting, /**/);
setState(EngineStartFailed);
}
void DebuggerEngine::setState(DebuggerState state, bool forced)
{
//qDebug() << "STATUS CHANGE: FROM " << stateName(d->m_state)
@@ -972,8 +984,16 @@ void DebuggerEngine::setState(DebuggerState state, bool forced)
showMessage(msg, LogDebug);
plugin()->updateState(this);
if (state != oldState && state == DebuggerNotReady)
d->m_runControl->debuggingFinished();
if (state != oldState) {
if (state == DebuggerNotReady) {
d->m_runControl->debuggingFinished();
} else if (state == EngineStarted) {
d->m_runControl->startSuccessful();
} else if (state == EngineStartFailed) {
d->m_runControl->debuggingFinished();
d->m_runControl->startFailed();
}
}
}
bool DebuggerEngine::debuggerActionsEnabled() const
@@ -1008,18 +1028,6 @@ bool DebuggerEngine::debuggerActionsEnabled(DebuggerState state)
return false;
}
void DebuggerEngine::startFailed()
{
// The concrete engines themselves are responsible for changing state.
QTC_ASSERT(state() == DebuggerNotReady, setState(DebuggerNotReady));
d->m_runControl->startFailed();
}
void DebuggerEngine::startSuccessful()
{
d->m_runControl->startSuccessful();
}
void DebuggerEngine::notifyInferiorPid(qint64 pid)
{
if (d->m_inferiorPid == pid)