summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2010-12-10 12:41:44 +0100
committerhjk <qtc-committer@nokia.com>2010-12-10 12:42:40 +0100
commit77e3bfe8451343be5478027154a027cbcfe4b778 (patch)
treed67519bc838327e3987c8ea6e14dcadbc3df6443 /src/plugins
parent91e6c14ff921b35aabeb87ce3bdddc356f795b4c (diff)
downloadqt-creator-77e3bfe8451343be5478027154a027cbcfe4b778.tar.gz
debugger: structural cleanup remote debugging
Use virtual function instead of if/qobject_cast cascades.
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/debugger/debuggerengine.cpp11
-rw-r--r--src/plugins/debugger/debuggerengine.h16
-rw-r--r--src/plugins/debugger/debuggerrunner.cpp97
-rw-r--r--src/plugins/debugger/debuggerrunner.h3
-rw-r--r--src/plugins/debugger/gdb/abstractgdbadapter.cpp11
-rw-r--r--src/plugins/debugger/gdb/abstractgdbadapter.h3
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp10
-rw-r--r--src/plugins/debugger/gdb/gdbengine.h2
-rw-r--r--src/plugins/debugger/gdb/remotegdbserveradapter.cpp2
-rw-r--r--src/plugins/debugger/gdb/remoteplaingdbadapter.cpp6
-rw-r--r--src/plugins/debugger/gdb/remoteplaingdbadapter.h5
-rw-r--r--src/plugins/debugger/qml/qmlcppengine.cpp12
-rw-r--r--src/plugins/debugger/qml/qmlcppengine.h2
-rw-r--r--src/plugins/debugger/qml/qmlengine.cpp2
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodebugsupport.cpp6
15 files changed, 74 insertions, 114 deletions
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 3fc8de920b..5196254c51 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 4c6d2f8c3d..536d5ee105 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 97d904998c..46c79b8168 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 10562dfba4..c20a21dbc7 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 fa9dbbc39c..7879c5711b 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 033f51cac3..609a36e132 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 63c858a8b5..64ab9b857d 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 90ce7ae036..a3eabba00a 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 e8e74b7e71..14a1286b89 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 559bb0bd80..53bf78dfcb 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 6485831020..a7b41d7d91 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 6dc28e87c1..ee6fedc9b2 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 10c9a4011b..46b5a6c391 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 5d3d12cd02..314c87e41f 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 af85c550de..12b0ba8bd2 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)