diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 3fc8de920b87437b522eb8794627f7c18eec1e77..5196254c51783490e7405c0370e58ee65c36918a 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1430,6 +1430,17 @@ void DebuggerEngine::openDisassemblerView(const StackFrame &frame) agent->setFrame(frame, true, false); } +void DebuggerEngine::handleRemoteSetupDone(int gdbServerPort, int qmlPort) +{ + Q_UNUSED(gdbServerPort); + Q_UNUSED(qmlPort); +} + +void DebuggerEngine::handleRemoteSetupFailed(const QString &message) +{ + Q_UNUSED(message); +} + } // namespace Debugger #include "debuggerengine.moc" diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 4c6d2f8c3da314354f22db35b111e2f57673ea1f..536d5ee1053fc3aaf7603fefca41c55ff5a7ed69 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -35,7 +35,7 @@ #include "moduleshandler.h" // For 'Symbols' #include "breakpoint.h" // For 'BreakpointId' -#include <coreplugin/ssh/sshconnection.h> +#include <coreplugin/ssh/sshconnection.h> #include <utils/environment.h> @@ -203,6 +203,9 @@ public: virtual void removeTooltip(); virtual void selectThread(int index); + virtual void handleRemoteSetupDone(int gdbServerPort, int qmlPort); + virtual void handleRemoteSetupFailed(const QString &message); + protected: friend class Internal::DebuggerPluginPrivate; virtual void detachDebugger(); @@ -255,7 +258,7 @@ public: void breakByFunction(const QString &functionName); void breakByFunctionMain(); - + DebuggerState state() const; DebuggerState lastGoodState() const; DebuggerState targetState() const; @@ -289,6 +292,15 @@ public: signals: void stateChanged(const DebuggerState &state); void updateViewsRequested(); + /* + * For "external" clients of a debugger run control that need to do + * further setup before the debugger is started (e.g. Maemo). + * Afterwards, handleSetupDone() or handleSetupFailed() must be called + * to continue or abort debugging, respectively. + * This signal is only emitted if the start parameters indicate that + * a server start script should be used, but none is given. + */ + void requestRemoteSetup(); protected: // The base notify*() function implementation should be sufficient diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 97d904998c62129097b04f811bd430f413ec1d89..46c79b8168294670afc1c10901586183e5c66c33 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -35,12 +35,7 @@ #include "debuggermainwindow.h" #include "debuggerplugin.h" #include "debuggerstringutils.h" -#include "gdb/gdbengine.h" -#include "gdb/remotegdbserveradapter.h" -#include "gdb/remoteplaingdbadapter.h" #include "gdb/gdboptionspage.h" -#include "qml/qmlengine.h" -#include "qml/qmlcppengine.h" #include "lldb/lldbenginehost.h" #ifdef Q_OS_WIN @@ -269,10 +264,6 @@ public: DebuggerEngineType engineForMode(unsigned enabledEngineTypes, DebuggerStartMode mode); - void initGdbEngine(GdbEngine *engine); - GdbEngine *gdbEngine() const; - AbstractGdbAdapter *gdbAdapter() const; - public: DebuggerRunControl *q; DebuggerEngine *m_engine; @@ -383,38 +374,6 @@ DebuggerEngineType DebuggerRunControlPrivate::engineForMode #endif } -void DebuggerRunControlPrivate::initGdbEngine(GdbEngine *engine) -{ - QTC_ASSERT(engine, return) - - // Forward adapter signals. - AbstractGdbAdapter *adapter = engine->gdbAdapter(); - RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter); - RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter); - if (rpga) - q->connect(rpga, SIGNAL(requestSetup()), SIGNAL(engineRequestSetup())); - else if (rgsa) - q->connect(rgsa, SIGNAL(requestSetup()), SIGNAL(engineRequestSetup())); -} - -GdbEngine *DebuggerRunControlPrivate::gdbEngine() const -{ - QTC_ASSERT(m_engine, return 0); - if (GdbEngine *gdbEngine = qobject_cast<GdbEngine *>(m_engine)) - return gdbEngine; - if (QmlCppEngine *qmlEngine = qobject_cast<QmlCppEngine *>(m_engine)) - if (GdbEngine *embeddedGdbEngine = qobject_cast<GdbEngine *>(qmlEngine->cppEngine())) - return embeddedGdbEngine; - return 0; -} - -AbstractGdbAdapter *DebuggerRunControlPrivate::gdbAdapter() const -{ - GdbEngine *engine = gdbEngine(); - QTC_ASSERT(engine, return 0) - return engine->gdbAdapter(); -} - } // namespace Internal @@ -514,7 +473,6 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration, switch (engineType) { case GdbEngineType: d->m_engine = createGdbEngine(sp); - d->initGdbEngine(qobject_cast<GdbEngine *>(d->m_engine)); break; case ScriptEngineType: d->m_engine = createScriptEngine(sp); @@ -534,14 +492,9 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration, break; case QmlEngineType: d->m_engine = createQmlEngine(sp); - connect(qobject_cast<QmlEngine *>(d->m_engine), - SIGNAL(remoteStartupRequested()), - SIGNAL(engineRequestSetup())); break; case QmlCppEngineType: d->m_engine = createQmlCppEngine(sp); - if (GdbEngine *embeddedGdbEngine = d->gdbEngine()) - d->initGdbEngine(embeddedGdbEngine); break; case LldbEngineType: d->m_engine = createLldbEngine(sp); @@ -742,56 +695,6 @@ DebuggerEngine *DebuggerRunControl::engine() return d->m_engine; } -void DebuggerRunControl::handleRemoteSetupDone(int gdbServerPort, int qmlPort) -{ - // FIXME: Use virtual functions? - if (QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(d->m_engine)) { - qmlEngine->handleRemoteSetupDone(qmlPort); - return; - } - - AbstractGdbAdapter *adapter = d->gdbAdapter(); - QTC_ASSERT(adapter, return); - - RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter); - if (rpga) { - rpga->handleSetupDone(qmlPort); - return; - } - - RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter); - if (rgsa) { - rgsa->handleSetupDone(gdbServerPort, qmlPort); - return; - } - QTC_ASSERT(false, /**/); -} - -void DebuggerRunControl::handleRemoteSetupFailed(const QString &message) -{ - // FIXME: Use virtual functions? - if (QmlEngine *qmlEngine = qobject_cast<QmlEngine *>(d->m_engine)) { - qmlEngine->handleRemoteSetupFailed(message); - return; - } - - AbstractGdbAdapter *adapter = d->gdbAdapter(); - QTC_ASSERT(adapter, return); - - RemotePlainGdbAdapter *rpga = qobject_cast<RemotePlainGdbAdapter *>(adapter); - if (rpga) { - rpga->handleSetupFailed(message); - return; - } - - RemoteGdbServerAdapter *rgsa = qobject_cast<RemoteGdbServerAdapter *>(adapter); - if (rgsa) { - rgsa->handleSetupFailed(message); - return; - } - QTC_ASSERT(false, /**/); -} - RunConfiguration *DebuggerRunControl::runConfiguration() const { return d->m_myRunConfiguration.data(); diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index 10562dfba48ed26ccb0588b7857bfb2f3212f999..c20a21dbc7b8ab16291aec1dc212c6b6010d058f 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -106,9 +106,6 @@ public: void showMessage(const QString &msg, int channel); - void handleRemoteSetupDone(int gdbServerPort, int qmlPort); - void handleRemoteSetupFailed(const QString &message); - static bool checkDebugConfiguration(int toolChain, QString *errorMessage, QString *settingsCategory = 0, diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.cpp b/src/plugins/debugger/gdb/abstractgdbadapter.cpp index fa9dbbc39cdb6a388e47174b09baba0edaf6da3f..7879c5711b550ee07a36d11ca2190b74af01e571 100644 --- a/src/plugins/debugger/gdb/abstractgdbadapter.cpp +++ b/src/plugins/debugger/gdb/abstractgdbadapter.cpp @@ -145,5 +145,16 @@ void AbstractGdbAdapter::showMessage(const QString &msg, int channel, int timeou m_engine->showMessage(msg, channel, timeout); } +void AbstractGdbAdapter::handleRemoteSetupDone(int gdbServerPort, int qmlPort) +{ + Q_UNUSED(gdbServerPort); + Q_UNUSED(qmlPort); +} + +void AbstractGdbAdapter::handleRemoteSetupFailed(const QString &reason) +{ + Q_UNUSED(reason); +} + } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/gdb/abstractgdbadapter.h b/src/plugins/debugger/gdb/abstractgdbadapter.h index 033f51cac37fdf4c7fddcde196e771a15d93caa0..609a36e132164c72a39645145b2623524d9e6a33 100644 --- a/src/plugins/debugger/gdb/abstractgdbadapter.h +++ b/src/plugins/debugger/gdb/abstractgdbadapter.h @@ -90,6 +90,9 @@ public: virtual void trkReloadRegisters() {} virtual void trkReloadThreads() {} + virtual void handleRemoteSetupDone(int gdbServerPort, int qmlPort); + virtual void handleRemoteSetupFailed(const QString &reason); + protected: DebuggerState state() const; const DebuggerStartParameters &startParameters() const; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 63c858a8b54e03f6576f02833918cf8c0da785c2..64ab9b857da3bef89036c7ea92b439b075a48c6b 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4398,6 +4398,16 @@ void GdbEngine::removeTooltip() DebuggerEngine::removeTooltip(); } +void GdbEngine::handleRemoteSetupDone(int gdbServerPort, int qmlPort) +{ + m_gdbAdapter->handleRemoteSetupDone(gdbServerPort, qmlPort); +} + +void GdbEngine::handleRemoteSetupFailed(const QString &message) +{ + m_gdbAdapter->handleRemoteSetupFailed(message); +} + // // Factory // diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 90ce7ae0364b8875bcf23a9783b9e9cb667315a4..a3eabba00a0974eeeb0b0995d76776fe70c4bec0 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -127,6 +127,8 @@ private: ////////// Gdb Process Management ////////// const QString &settingsIdHint = QString()); void handleInferiorShutdown(const GdbResponse &response); void handleGdbExit(const GdbResponse &response); + void handleRemoteSetupDone(int gdbServerPort, int qmlPort); + void handleRemoteSetupFailed(const QString &message); void handleAdapterStarted(); void defaultInferiorShutdown(const char *cmd); diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index e8e74b7e711e1f387ba55a1d45eb0eccc461bd99..14a1286b898829fd4087f3f411567d45f73db2dc 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -96,7 +96,7 @@ void RemoteGdbServerAdapter::startAdapter() } if (startParameters().serverStartScript.isEmpty()) { showMessage(_("No server start script given. "), StatusBar); - emit requestSetup(); + m_engine->requestRemoteSetup(); } else { m_uploadProc.start(_("/bin/sh ") + startParameters().serverStartScript); m_uploadProc.waitForStarted(); diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp index 559bb0bd80378a37cfa4cba26143ce3288fae9c0..53bf78dfcbe21c5b995a5c9f2cd78c30a8b534d0 100644 --- a/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.cpp @@ -50,8 +50,7 @@ void RemotePlainGdbAdapter::startAdapter() { QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); showMessage(QLatin1String("TRYING TO START ADAPTER")); - - emit requestSetup(); + m_engine->requestRemoteSetup(); } void RemotePlainGdbAdapter::setupInferior() @@ -101,8 +100,9 @@ void RemotePlainGdbAdapter::shutdownAdapter() m_engine->notifyAdapterShutdownOk(); } -void RemotePlainGdbAdapter::handleSetupDone(int qmlPort) +void RemotePlainGdbAdapter::handleSetupDone(int gdbServerPort, int qmlPort) { + Q_UNUSED(gdbServerPort); QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); if (qmlPort != -1) diff --git a/src/plugins/debugger/gdb/remoteplaingdbadapter.h b/src/plugins/debugger/gdb/remoteplaingdbadapter.h index 6485831020ab4d5af5f8283d2320209f265f07fa..a7b41d7d91c31f2267920a7c764b6bc5768901b4 100644 --- a/src/plugins/debugger/gdb/remoteplaingdbadapter.h +++ b/src/plugins/debugger/gdb/remoteplaingdbadapter.h @@ -43,12 +43,9 @@ class RemotePlainGdbAdapter : public AbstractPlainGdbAdapter public: friend class RemoteGdbProcess; explicit RemotePlainGdbAdapter(GdbEngine *engine, QObject *parent = 0); - void handleSetupDone(int qmlPort); + void handleSetupDone(int gdbServerPort, int qmlPort); void handleSetupFailed(const QString &reason); -signals: - void requestSetup(); - private slots: void handleGdbStarted(); void handleGdbStartFailed(); diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index 6dc28e87c1bfdb2b4c1968fe5de8cf59779d2001..ee6fedc9b24bdb6fa3aa00ee82b9602cd71df05c 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -634,6 +634,18 @@ void QmlCppEngine::engineStateChanged(const DebuggerState &newState) } } +void QmlCppEngine::handleRemoteSetupDone(int gdbServerPort, int qmlPort) +{ + d->m_qmlEngine->handleRemoteSetupDone(gdbServerPort, qmlPort); + d->m_cppEngine->handleRemoteSetupDone(gdbServerPort, qmlPort); +} + +void QmlCppEngine::handleRemoteSetupFailed(const QString &message) +{ + d->m_qmlEngine->handleRemoteSetupFailed(message); + d->m_cppEngine->handleRemoteSetupFailed(message); +} + DebuggerEngine *QmlCppEngine::cppEngine() const { return d->m_cppEngine; diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index 10c9a4011b111e4317228f77af4ad7af4d8e10b4..46b5a6c391cb785ebec9c25c1a34fc989513c320 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -71,6 +71,8 @@ public: QAbstractItemModel *sourceFilesModel() const; DebuggerEngine *cppEngine() const; + virtual void handleRemoteSetupDone(int gdbServerPort, int qmlPort); + virtual void handleRemoteSetupFailed(const QString &message); protected: virtual void detachDebugger(); diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 5d3d12cd02b65011d4c0a709f5fa2207d82ca81c..314c87e41f71a17cf17255b6ddff6ff51584ac80 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -200,7 +200,7 @@ void QmlEngine::setupInferior() QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state()); if (startParameters().startMode == AttachToRemote) { - emit remoteStartupRequested(); + requestRemoteSetup(); } else { connect(&d->m_applicationLauncher, SIGNAL(processExited(int)), SLOT(disconnected())); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp index af85c550dee238be8f7df20d8d152a38ccb77019..12b0ba8bd2f7a7707e6c1abe091c2941cb8c69f1 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp @@ -121,7 +121,7 @@ MaemoDebugSupport::MaemoDebugSupport(MaemoRunConfiguration *runConfig, m_dumperLib(runConfig->dumperLib()), m_state(Inactive), m_gdbServerPort(-1), m_qmlPort(-1) { - connect(m_runControl, SIGNAL(engineRequestSetup()), this, + connect(m_runControl->engine(), SIGNAL(requestRemoteSetup()), this, SLOT(handleAdapterSetupRequested())); connect(m_runControl, SIGNAL(finished()), this, SLOT(handleDebuggingFinished())); @@ -320,13 +320,13 @@ void MaemoDebugSupport::handleProgressReport(const QString &progressOutput) void MaemoDebugSupport::handleAdapterSetupFailed(const QString &error) { setState(Inactive); - m_runControl->handleRemoteSetupFailed(tr("Initial setup failed: %1").arg(error)); + m_runControl->engine()->handleRemoteSetupFailed(tr("Initial setup failed: %1").arg(error)); } void MaemoDebugSupport::handleAdapterSetupDone() { setState(Debugging); - m_runControl->handleRemoteSetupDone(m_gdbServerPort, m_qmlPort); + m_runControl->engine()->handleRemoteSetupDone(m_gdbServerPort, m_qmlPort); } void MaemoDebugSupport::setState(State newState)