diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 608b2cdd4b6d434891ee1008a645c58fea2d630f..c22eacff98967f129af4518614402be8710830c0 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 6b4853e408ae7020691b2ddb62ab62b034a87413..619027a87d56d29eed53b165557ba86ae7c764ea 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 c542087c2514240d2093e7d6857ccfdb124648bc..69063ff276c7d7254261e62dab6276ecdd0f4a38 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 0cd5b96f4ef88f8adbe9d82faa199ff95dda2687..1b1083fd6c35abc2c6ba86f38dc04f0ca379a5cc 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 4c92eb09cd75fa9bf2b9bb88254b15e08fd8c157..fa732a44589ea99d6c997a361e251e26f44b159c 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 4194733461cc6f11aaa8ef332f3f572bb4ec0ff3..eb47fa782b3a09d0f0d6fbbfa9f5af58330f427d 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 70ffe85190693cde5122e8b6446d5a512b16ea77..2109f0ba72123f45e93a834177af70c16f982f56 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 cd458ef48bb38df84db6ec652316b0b2c94761e6..01fa77bf67586ed102b33f58b326e59d59824635 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()