From 85243e19a99e088df7d1d994a11d9d1a845d9c3e Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Thu, 8 Jul 2010 14:26:35 +0200 Subject: [PATCH] debugger: encapsulate part of the startup logic in the base class --- src/plugins/debugger/cdb/cdbengine.cpp | 8 ++-- src/plugins/debugger/debuggerengine.cpp | 44 ++++++++++++-------- src/plugins/debugger/debuggerengine.h | 4 +- src/plugins/debugger/gdb/gdbengine.cpp | 3 +- src/plugins/debugger/pdb/pdbengine.cpp | 7 ++-- src/plugins/debugger/qml/qmlengine.cpp | 13 ++---- src/plugins/debugger/script/scriptengine.cpp | 4 +- src/plugins/debugger/tcf/tcfengine.cpp | 7 ++-- 8 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 608b2cdd4b6..c22eacff989 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -387,7 +387,7 @@ void CdbEngine::startEngine() warning(QLatin1String("Internal error: Attempt to start debugger while another process is being debugged.")); setState(EngineStartFailed, Q_FUNC_INFO, __LINE__); setState(DebuggerNotReady, Q_FUNC_INFO, __LINE__); - emit startFailed(); + notifyEngineStartFailed(); return; } switch (sp.startMode) { @@ -396,7 +396,7 @@ void CdbEngine::startEngine() warning(QLatin1String("Internal error: Mode not supported.")); setState(EngineStartFailed, Q_FUNC_INFO, __LINE__); setState(DebuggerNotReady, Q_FUNC_INFO, __LINE__); - emit startFailed(); + notifyEngineStartFailed(); break; default: break; @@ -470,11 +470,11 @@ void CdbEngine::startEngine() if (rc) { if (needWatchTimer) m_d->startWatchTimer(); - startSuccessful(); + notifyEngineStarted(); } else { warning(errorMessage); setState(InferiorStartFailed, Q_FUNC_INFO, __LINE__); - startFailed(); + notifyEngineStartFailed(); } } diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 6b4853e408a..619027a87d5 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -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) diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index c542087c251..69063ff276c 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -248,13 +248,13 @@ public slots: void openFile(const QString &fileName, int lineNumber = -1); void gotoLocation(const QString &fileName, int lineNumber, bool setMarker); void gotoLocation(const StackFrame &frame, bool setMarker); - void startSuccessful(); - void startFailed(); void raiseApplication(); virtual void quitDebugger() { exitDebugger(); } // called by DebuggerRunControl protected: void setState(DebuggerState state, bool forced = false); + void notifyEngineStarted(); + void notifyEngineStartFailed(); private: void executeRunToLine(); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 0cd5b96f4ef..1b1083fd6c3 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4205,7 +4205,7 @@ void GdbEngine::handleAdapterStartFailed(const QString &msg, const QString &sett void GdbEngine::handleAdapterStarted() { - setState(EngineStarted); + notifyEngineStarted(); if (m_progress) m_progress->setProgressValue(25); showMessage(_("ADAPTER SUCCESSFULLY STARTED")); @@ -4217,7 +4217,6 @@ void GdbEngine::handleAdapterStarted() void GdbEngine::handleInferiorPrepared() { - startSuccessful(); const QByteArray qtInstallPath = startParameters().qtInstallPath.toLocal8Bit(); if (!qtInstallPath.isEmpty()) { QByteArray qtBuildPath; diff --git a/src/plugins/debugger/pdb/pdbengine.cpp b/src/plugins/debugger/pdb/pdbengine.cpp index 4c92eb09cd7..fa732a44589 100644 --- a/src/plugins/debugger/pdb/pdbengine.cpp +++ b/src/plugins/debugger/pdb/pdbengine.cpp @@ -148,7 +148,7 @@ void PdbEngine::startEngine() //showMessage("STARTING " +m_scriptFileName + "FAILED"); showMessage(QString::fromLatin1("Cannot open %1: %2"). arg(m_scriptFileName, scriptFile.errorString()), LogError); - startFailed(); + notifyEngineStartFailed(); return; } m_pdbProc.disconnect(); // From any previous runs @@ -188,9 +188,10 @@ void PdbEngine::startEngine() Core::ICore::instance()->showWarningWithOptions(title, msg); } shutdown(); - startFailed(); + notifyEngineStartFailed(); return; } + notifyEngineStarted(); attemptBreakpointSynchronization(); showMessage(_("PDB STARTED, INITIALIZING IT")); @@ -199,9 +200,7 @@ void PdbEngine::startEngine() postCommand("execfile('" + dumperSourcePath + "pdumper.py')", CB(handleLoadDumper)); - setState(EngineStarted); setState(InferiorStarting); - emit startSuccessful(); showStatusMessage(tr("Running requested..."), 5000); setState(InferiorRunningRequested); setState(InferiorRunning); diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 4194733461c..eb47fa782b3 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -251,18 +251,13 @@ void QmlEngine::startEngine() m_proc.start(sp.executable, sp.processArgs); if (!m_proc.waitForStarted()) { - setState(EngineStartFailed); - startFailed(); + notifyEngineStartFailed(); return; } #endif - setState(EngineStarted); - startSuccessful(); - setState(InferiorStarting); - + notifyEngineStarted(); //m_frameRate = new CanvasFrameRate(0); //m_frameRate->show(); - setState(InferiorRunning); } void QmlEngine::setupConnection() @@ -300,12 +295,12 @@ void QmlEngine::setupConnection() if (!m_conn->waitForConnected()) { qDebug() << "CONNECTION FAILED"; - setState(InferiorStartFailed); - startFailed(); + notifyEngineStartFailed(); return; } #endif + notifyEngineStarted(); qDebug() << "CONNECTION SUCCESSFUL"; setState(InferiorRunningRequested); setState(InferiorRunning); diff --git a/src/plugins/debugger/script/scriptengine.cpp b/src/plugins/debugger/script/scriptengine.cpp index 70ffe851906..2109f0ba721 100644 --- a/src/plugins/debugger/script/scriptengine.cpp +++ b/src/plugins/debugger/script/scriptengine.cpp @@ -255,9 +255,10 @@ void ScriptEngine::startEngine() if (!scriptFile.open(QIODevice::ReadOnly|QIODevice::Text)) { showMessage(QString::fromLatin1("Cannot open %1: %2"). arg(m_scriptFileName, scriptFile.errorString()), LogError); - startFailed(); + notifyEngineStartFailed(); return; } + notifyEngineStarted(); QTextStream stream(&scriptFile); m_scriptContents = stream.readAll(); scriptFile.close(); @@ -266,7 +267,6 @@ void ScriptEngine::startEngine() showStatusMessage(tr("Running requested..."), 5000); showMessage(QLatin1String("Running: ") + m_scriptFileName, LogMisc); QTimer::singleShot(0, this, SLOT(runInferior())); - startSuccessful(); } void ScriptEngine::continueInferior() diff --git a/src/plugins/debugger/tcf/tcfengine.cpp b/src/plugins/debugger/tcf/tcfengine.cpp index cd458ef48bb..01fa77bf675 100644 --- a/src/plugins/debugger/tcf/tcfengine.cpp +++ b/src/plugins/debugger/tcf/tcfengine.cpp @@ -155,8 +155,10 @@ void TcfEngine::socketReadyRead() void TcfEngine::socketConnected() { showStatusMessage("Socket connected."); - m_socket->waitForConnected(2000); - //sendCommand("Locator", "redirect", "ID"); + if (m_socket->waitForConnected(2000)) + notifyEngineStarted(); + else + notifyEngineStartFailed(); } void TcfEngine::socketDisconnected() @@ -211,7 +213,6 @@ void TcfEngine::startEngine() const quint16 port = sp.remoteChannel.mid(pos + 1).toInt(); //QTimer::singleShot(0, this, SLOT(runInferior())); m_socket->connectToHost(host, port); - emit startSuccessful(); } void TcfEngine::continueInferior() -- GitLab