OSDN Git Service

debugger: find better separation between runcontrol and engine
authorhjk <qtc-committer@nokia.com>
Fri, 10 Dec 2010 09:01:29 +0000 (10:01 +0100)
committerhjk <qtc-committer@nokia.com>
Fri, 10 Dec 2010 11:42:40 +0000 (12:42 +0100)
src/plugins/debugger/debuggercore.h
src/plugins/debugger/debuggerengine.h
src/plugins/debugger/debuggerplugin.cpp
src/plugins/debugger/debuggerrunner.cpp
src/plugins/debugger/snapshothandler.cpp
src/plugins/debugger/snapshothandler.h
src/plugins/debugger/snapshotwindow.cpp

index 0fa30f3..82d45f6 100644 (file)
@@ -54,7 +54,6 @@ class SavedAction;
 namespace Debugger {
 
 class DebuggerEngine;
-class DebuggerRunControl;
 class DebuggerStartParameters;
 
 namespace Internal {
@@ -101,8 +100,8 @@ public:
     virtual void removeLocationMark() = 0;
 
     virtual bool isReverseDebugging() const = 0;
-    virtual void runControlStarted(DebuggerRunControl *runControl) = 0;
-    virtual void runControlFinished(DebuggerRunControl *runControl) = 0;
+    virtual void runControlStarted(DebuggerEngine *engine) = 0;
+    virtual void runControlFinished(DebuggerEngine *engine) = 0;
     virtual void displayDebugger(DebuggerEngine *engine, bool updateEngine) = 0;
     virtual DebuggerLanguages activeLanguages() const = 0;
     virtual void synchronizeBreakpoints() = 0;
index f99033d..4c6d2f8 100644 (file)
@@ -333,9 +333,9 @@ protected:
     virtual void shutdownInferior() = 0;
     virtual void shutdownEngine() = 0;
 
-protected:
-    DebuggerRunControl *runControl() const;
+    DebuggerRunControl *runControl() const; // FIXME: Protect.
 
+protected:
     static QString msgWatchpointTriggered(BreakpointId id,
         int number, quint64 address);
     static QString msgWatchpointTriggered(BreakpointId id,
index e8fcfaa..24667a3 100644 (file)
@@ -980,20 +980,16 @@ public slots:
     {
         showMessage("ATTEMPT SYNC", LogDebug);
         for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
-            if (DebuggerRunControl *runControl = m_snapshotHandler->at(i)) {
-                DebuggerEngine *engine = runControl->engine();
+            if (DebuggerEngine *engine = m_snapshotHandler->at(i))
                 engine->attemptBreakpointSynchronization();
-            }
         }
     }
 
     void synchronizeWatchers()
     {
         for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
-            if (DebuggerRunControl *runControl = m_snapshotHandler->at(i)) {
-                DebuggerEngine *engine = runControl->engine();
+            if (DebuggerEngine *engine = m_snapshotHandler->at(i))
                 engine->watchHandler()->updateWatchers();
-            }
         }
     }
 
@@ -1043,8 +1039,8 @@ public slots:
     bool hasSnapshots() const { return m_snapshotHandler->size(); }
     void createNewDock(QWidget *widget);
 
-    void runControlStarted(DebuggerRunControl *runControl);
-    void runControlFinished(DebuggerRunControl *runControl);
+    void runControlStarted(DebuggerEngine *engine);
+    void runControlFinished(DebuggerEngine *engine);
     DebuggerLanguages activeLanguages() const;
     QString gdbBinaryForToolChain(int toolChain) const;
     void remoteCommand(const QStringList &options, const QStringList &);
@@ -1477,11 +1473,11 @@ void DebuggerPluginPrivate::onCurrentProjectChanged(Project *project)
     }
     for (int i = 0, n = m_snapshotHandler->size(); i != n; ++i) {
         // Run controls might be deleted during exit.
-        if (DebuggerRunControl *runControl = m_snapshotHandler->at(i)) {
+        if (DebuggerEngine *engine = m_snapshotHandler->at(i)) {
+            DebuggerRunControl *runControl = engine->runControl();
             RunConfiguration *rc = runControl->runConfiguration();
             if (rc == activeRc) {
                 m_snapshotHandler->setCurrentIndex(i);
-                DebuggerEngine *engine = runControl->engine();
                 updateState(engine);
                 return;
             }
@@ -2387,7 +2383,7 @@ void DebuggerPluginPrivate::aboutToUnloadSession()
     // with command-line debugging startup.
     // FIXME ABC: Still wanted? Iterate?
     //if (d->m_engine && state() != DebuggerNotReady
-    //    && runControl()->sp().startMode == StartInternal)
+    //    && engine()->sp().startMode == StartInternal)
     //        d->m_engine->shutdown();
 }
 
@@ -2578,22 +2574,21 @@ void DebuggerPluginPrivate::createNewDock(QWidget *widget)
     dockWidget->show();
 }
 
-void DebuggerPluginPrivate::runControlStarted(DebuggerRunControl *runControl)
+void DebuggerPluginPrivate::runControlStarted(DebuggerEngine *engine)
 {
     activateDebugMode();
-    DebuggerEngine *engine = runControl->engine();
     const QString message = tr("Starting debugger '%1' for tool chain '%2'...")
             .arg(engine->objectName())
             .arg(engine->startParameters().toolChainName());
     showMessage(message, StatusBar);
     showMessage(m_debuggerSettings->dump(), LogDebug);
-    m_snapshotHandler->appendSnapshot(runControl);
+    m_snapshotHandler->appendSnapshot(engine);
     connectEngine(engine);
 }
 
-void DebuggerPluginPrivate::runControlFinished(DebuggerRunControl *runControl)
+void DebuggerPluginPrivate::runControlFinished(DebuggerEngine *engine)
 {
-    m_snapshotHandler->removeSnapshot(runControl);
+    m_snapshotHandler->removeSnapshot(engine);
     if (m_snapshotHandler->size() == 0) {
         // Last engine quits.
         disconnectEngine();
index 7ee2644..97d9049 100644 (file)
@@ -656,7 +656,7 @@ void DebuggerRunControl::start()
         return;
     }
 
-    debuggerCore()->runControlStarted(this);
+    debuggerCore()->runControlStarted(engine());
 
     // We might get a synchronous startFailed() notification on Windows,
     // when launching the process fails. Emit a proper finished() sequence.
@@ -684,7 +684,7 @@ void DebuggerRunControl::handleFinished()
     emit addToOutputWindowInline(this, tr("Debugging has finished"), false);
     if (engine())
         engine()->handleFinished();
-    debuggerCore()->runControlFinished(this);
+    debuggerCore()->runControlFinished(engine());
 }
 
 void DebuggerRunControl::showMessage(const QString &msg, int channel)
index 93d5b16..a270aa0 100644 (file)
@@ -123,21 +123,14 @@ SnapshotHandler::SnapshotHandler()
 SnapshotHandler::~SnapshotHandler()
 {
     for (int i = m_snapshots.size(); --i >= 0; ) {
-        if (DebuggerEngine *engine = engineAt(i)) {
-            const DebuggerStartParameters & sp = engine->startParameters();
+        if (DebuggerEngine *engine = at(i)) {
+            const DebuggerStartParameters &sp = engine->startParameters();
             if (sp.isSnapshot && !sp.coreFile.isEmpty())
                 QFile::remove(sp.coreFile);
         }
     }
 }
 
-DebuggerEngine *SnapshotHandler::engineAt(int i) const
-{
-    DebuggerEngine *engine = m_snapshots.at(i)->engine();
-    QTC_ASSERT(engine, qDebug() << "ENGINE AT " << i << "DELETED");
-    return engine;
-}
-
 int SnapshotHandler::rowCount(const QModelIndex &parent) const
 {
     // Since the stack is not a tree, row count is 0 for any valid parent
@@ -154,7 +147,7 @@ QVariant SnapshotHandler::data(const QModelIndex &index, int role) const
     if (!index.isValid() || index.row() >= m_snapshots.size())
         return QVariant();
 
-    const DebuggerEngine *engine = engineAt(index.row());
+    const DebuggerEngine *engine = at(index.row());
 
     if (role == SnapshotCapabilityRole)
         return engine && (engine->debuggerCapabilities() & SnapshotCapability);
@@ -213,20 +206,20 @@ void SnapshotHandler::activateSnapshot(int index)
 {
     m_currentIndex = index;
     //qDebug() << "ACTIVATING INDEX: " << m_currentIndex << " OF " << size();
-    debuggerCore()->displayDebugger(engineAt(index), true);
+    debuggerCore()->displayDebugger(at(index), true);
     reset();
 }
 
 void SnapshotHandler::createSnapshot(int index)
 {
-    DebuggerEngine *engine = engineAt(index);
+    DebuggerEngine *engine = at(index);
     QTC_ASSERT(engine, return);
     engine->createSnapshot();
 }
 
 void SnapshotHandler::removeSnapshot(int index)
 {
-    DebuggerEngine *engine = engineAt(index);
+    DebuggerEngine *engine = at(index);
     //qDebug() << "REMOVING " << engine;
     QTC_ASSERT(engine, return);
 #if 0
@@ -254,17 +247,17 @@ void SnapshotHandler::removeAll()
     reset();
 }
 
-void SnapshotHandler::appendSnapshot(DebuggerRunControl *rc)
+void SnapshotHandler::appendSnapshot(DebuggerEngine *engine)
 {
-    m_snapshots.append(rc);
+    m_snapshots.append(engine);
     m_currentIndex = size() - 1;
     reset();
 }
 
-void SnapshotHandler::removeSnapshot(DebuggerRunControl *rc)
+void SnapshotHandler::removeSnapshot(DebuggerEngine *engine)
 {
     // Could be that the run controls died before it was appended.
-    int index = m_snapshots.indexOf(rc);
+    int index = m_snapshots.indexOf(engine);
     if (index != -1)
         removeSnapshot(index);
 }
@@ -275,22 +268,10 @@ void SnapshotHandler::setCurrentIndex(int index)
     reset();
 }
 
-DebuggerRunControl *SnapshotHandler::at(int i) const
+DebuggerEngine *SnapshotHandler::at(int i) const
 {
     return m_snapshots.at(i).data();
 }
 
-QList<DebuggerRunControl*> SnapshotHandler::runControls() const
-{
-    // Return unique list of run controls
-    QList<DebuggerRunControl*> rc;
-    rc.reserve(m_snapshots.size());
-    foreach(const QPointer<DebuggerRunControl> &runControlPtr, m_snapshots)
-        if (DebuggerRunControl *runControl = runControlPtr)
-            if (!rc.contains(runControl))
-                rc.push_back(runControl);
-    return rc;
-}
-
 } // namespace Internal
 } // namespace Debugger
index 56e4219..bd13026 100644 (file)
@@ -35,7 +35,6 @@
 
 namespace Debugger {
 
-class DebuggerRunControl;
 class DebuggerEngine;
 
 namespace Internal {
@@ -59,12 +58,11 @@ public:
     void removeAll();
     QAbstractItemModel *model() { return this; }
     int currentIndex() const { return m_currentIndex; }
-    void appendSnapshot(DebuggerRunControl *rc);
-    void removeSnapshot(DebuggerRunControl *rc);
+    void appendSnapshot(DebuggerEngine *engine);
+    void removeSnapshot(DebuggerEngine *engine);
     void setCurrentIndex(int index);
     int size() const { return m_snapshots.size(); }
-    DebuggerRunControl *at(int index) const;
-    QList<DebuggerRunControl *> runControls() const;
+    DebuggerEngine *at(int index) const;
 
     void createSnapshot(int index);
     void activateSnapshot(int index);
@@ -78,10 +76,9 @@ private:
     QVariant headerData(int section, Qt::Orientation orientation, int role) const;
     Qt::ItemFlags flags(const QModelIndex &index) const;
     Q_SLOT void resetModel() { reset(); }
-    DebuggerEngine *engineAt(int i) const;
 
     int m_currentIndex;
-    QList< QPointer<DebuggerRunControl> > m_snapshots;
+    QList< QPointer<DebuggerEngine> > m_snapshots;
     const QVariant m_positionIcon;
     const QVariant m_emptyIcon;
 };
index 97519b6..dedc351 100644 (file)
@@ -32,7 +32,7 @@
 
 #include "debuggeractions.h"
 #include "debuggercore.h"
-#include "debuggerrunner.h"
+#include "debuggerengine.h"
 
 #include <utils/qtcassert.h>
 #include <utils/savedaction.h>
@@ -136,7 +136,7 @@ void SnapshotWindow::contextMenuEvent(QContextMenuEvent *ev)
 
 void SnapshotWindow::removeSnapshot(int i)
 {
-    m_snapshotHandler->at(i)->stop();
+    m_snapshotHandler->at(i)->quitDebugger();
 }
 
 void SnapshotWindow::resizeColumnsToContents()