summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2010-07-20 18:31:35 +0200
committerhjk <qtc-committer@nokia.com>2010-07-20 18:54:50 +0200
commit753a28ed4e6c47c8e926f21c994edce55e2b6cf9 (patch)
tree28f1d4fa04de915d2891df7aa1ba5b0f30124b62 /src
parent62060ce79c840cbe290125023a05bc150ea12e82 (diff)
downloadqt-creator-753a28ed4e6c47c8e926f21c994edce55e2b6cf9.tar.gz
debugger: make debugger restartable using the buttons in the application output pane
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/debuggerengine.cpp24
-rw-r--r--src/plugins/debugger/debuggerengine.h1
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp1
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()