From fadac8009cec6f5efc6785e11d998abef4f75b0f Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 22 Jun 2010 15:37:27 +0200
Subject: [PATCH] debugger: more breakpoint management related fixes

---
 src/plugins/debugger/breakhandler.cpp   |  25 ++-
 src/plugins/debugger/breakhandler.h     |   1 +
 src/plugins/debugger/debuggerengine.cpp | 218 ++++++++++++------------
 src/plugins/debugger/debuggerengine.h   |   5 +-
 src/plugins/debugger/gdb/gdbengine.cpp  |   8 +-
 src/plugins/debugger/gdb/gdbengine.h    |   1 -
 6 files changed, 128 insertions(+), 130 deletions(-)

diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index e8cfac0dd7b..9c2ce4fc910 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -116,7 +116,7 @@ public:
 
         BreakHandler *handler = m_data->handler();
         handler->removeBreakpoint(m_data);
-        handler->saveBreakpoints();
+        //handler->saveBreakpoints();
         handler->updateMarkers();
     }
 
@@ -926,14 +926,14 @@ void BreakHandler::removeBreakpoint(int index)
         return;
     removeBreakpointHelper(index);
     emit layoutChanged();
-    saveBreakpoints();
+    //saveBreakpoints();
 }
 
 void BreakHandler::removeBreakpoint(BreakpointData *data)
 {
     removeBreakpointHelper(m_bp.indexOf(data));
     emit layoutChanged();
-    saveBreakpoints();
+    //saveBreakpoints();
 }
 
 void BreakHandler::toggleBreakpointEnabled(BreakpointData *data)
@@ -947,7 +947,7 @@ void BreakHandler::toggleBreakpointEnabled(BreakpointData *data)
         m_enabled.removeAll(data);
         m_disabled.append(data);
     }
-    saveBreakpoints();
+    //saveBreakpoints();
     updateMarkers();
 }
 
@@ -985,7 +985,6 @@ void BreakHandler::saveSessionData()
 
 void BreakHandler::loadSessionData()
 {
-    //resetBreakpoints();
     loadBreakpoints();
     updateMarkers();
 }
@@ -1004,7 +1003,7 @@ void BreakHandler::breakByFunction(const QString &functionName)
     BreakpointData *data = new BreakpointData;
     data->funcName = functionName;
     append(data);
-    saveBreakpoints();
+    //saveBreakpoints();
     updateMarkers();
 }
 
@@ -1012,11 +1011,23 @@ void BreakHandler::initializeFromTemplate(BreakHandler *other)
 {
     //qDebug() << "COPYING BREAKPOINTS INTO NEW SESSION";
     QTC_ASSERT(m_bp.isEmpty(), /**/);
-    foreach (BreakpointData *data, other->m_bp)
+    foreach (BreakpointData *data, other->m_bp) {
         append(data->clone());
+        data->removeMarker();
+    }
     updateMarkers();
 }
 
+void BreakHandler::storeToTemplate(BreakHandler *other)
+{
+    other->removeAllBreakpoints();
+    foreach (BreakpointData *data, m_bp)
+        other->append(data->clone());
+    removeAllBreakpoints();
+    other->updateMarkers();
+    other->saveSessionData();
+}
+
 } // namespace Internal
 } // namespace Debugger
 
diff --git a/src/plugins/debugger/breakhandler.h b/src/plugins/debugger/breakhandler.h
index 2d15b488c70..bcce8385ccc 100644
--- a/src/plugins/debugger/breakhandler.h
+++ b/src/plugins/debugger/breakhandler.h
@@ -87,6 +87,7 @@ public:
     QIcon pendingBreakPointIcon() const  { return m_pendingBreakPointIcon; }
 
     void initializeFromTemplate(BreakHandler *other);
+    void storeToTemplate(BreakHandler *other);
 
 public slots:
     void appendBreakpoint(BreakpointData *data);
diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index a4373400105..9d34e168b0e 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -156,6 +156,7 @@ const char *DebuggerEngine::stateName(int s)
 #    undef SN
 }
 
+
 //////////////////////////////////////////////////////////////////////
 //
 // CommandHandler
@@ -165,109 +166,19 @@ const char *DebuggerEngine::stateName(int s)
 class CommandHandler : public QStandardItemModel
 {
 public:
-    CommandHandler(DebuggerEngine *engine) : m_engine(engine) {}
+    explicit CommandHandler(DebuggerEngine *engine) : m_engine(engine) {}
     bool setData(const QModelIndex &index, const QVariant &value, int role);
     QAbstractItemModel *model() { return this; }
 
 private:
-    DebuggerEngine *m_engine;
+    QPointer<DebuggerEngine> m_engine;
 };
 
 bool CommandHandler::setData(const QModelIndex &, const QVariant &value, int role)
 {
-    //qDebug() << "COMMAND: " << role << value;
-
-    switch (role) {
-        case RequestLoadSessionDataRole:
-            m_engine->loadSessionData();
-            return true;
-
-        case RequestSaveSessionDataRole:
-            m_engine->saveSessionData();
-            return true;
-
-        case RequestReloadSourceFilesRole:
-            m_engine->reloadSourceFiles();
-            return true;
-
-        case RequestReloadModulesRole:
-            m_engine->reloadModules();
-            return true;
-
-        case RequestExecContinueRole:
-            m_engine->continueInferior();
-            return true;
-
-        case RequestExecInterruptRole:
-            m_engine->interruptInferior();
-            return true;
-
-        case RequestExecResetRole:
-            //m_engine->exec();
-            return true;
-
-        case RequestExecStepRole:
-            m_engine->executeStepX();
-            return true;
-
-        case RequestExecStepOutRole:
-            m_engine->executeStepOutX();
-            return true;
-
-        case RequestExecNextRole:
-            m_engine->executeStepNextX();
-            return true;
-
-        case RequestExecRunToLineRole:
-            //m_engine->executeRunToLine();
-            QTC_ASSERT(false, /* FIXME ABC */);
-            return true;
-
-        case RequestExecRunToFunctionRole:
-            //m_engine->executeRunToFunction();
-            QTC_ASSERT(false, /* FIXME ABC */);
-            return true;
-
-        case RequestExecReturnFromFunctionRole:
-            m_engine->executeReturnX();
-            return true;
-
-        case RequestExecJumpToLineRole:
-            //m_engine->executeJumpToLine();
-            QTC_ASSERT(false, /* FIXME ABC */);
-            return true;
-
-        case RequestExecWatchRole:
-            //m_engine->exec();
-            QTC_ASSERT(false, /* FIXME ABC */);
-            return true;
-
-        case RequestExecExitRole:
-            m_engine->exitDebugger();
-            return true;
-
-        case RequestExecSnapshotRole:
-            m_engine->makeSnapshot();
-            return true;
-
-        case RequestExecFrameDownRole:
-            m_engine->frameDown();
-            return true;
-
-        case RequestExecFrameUpRole:
-            m_engine->frameUp();
-            return true;
-
-        case RequestOperatedByInstructionTriggeredRole:
-            m_engine->gotoLocation(m_engine->stackHandler()->currentFrame(), true);
-            return true;
-
-        case RequestExecuteCommandRole:
-            m_engine->executeDebuggerCommand(value.toString());
-            return true;
-    }
-
-    return false;
+    QTC_ASSERT(m_engine, return false);
+    m_engine->handleCommand(role, value);
+    return true;
 }
 
 
@@ -336,12 +247,106 @@ DebuggerEngine::~DebuggerEngine()
     //saveSessionData();
 }
 
-/*
-void DebuggerEngine::showStatusMessage(const QString &msg, int timeout)
+void DebuggerEngine::showStatusMessage(const QString &msg, int timeout) const
 {
-    plugin()->showStatusMessage(msg, timeout);
+    showMessage(msg, StatusBar, timeout);
 }
-*/
+
+void DebuggerEngine::handleCommand(int role, const QVariant &value)
+{
+    //qDebug() << "COMMAND: " << role << value;
+
+    switch (role) {
+        case RequestLoadSessionDataRole:
+            loadSessionData();
+            break;
+
+        case RequestSaveSessionDataRole:
+            saveSessionData();
+            break;
+
+        case RequestReloadSourceFilesRole:
+            reloadSourceFiles();
+            break;
+
+        case RequestReloadModulesRole:
+            reloadModules();
+            break;
+
+        case RequestExecContinueRole:
+            continueInferior();
+            break;
+
+        case RequestExecInterruptRole:
+            interruptInferior();
+            break;
+
+        case RequestExecResetRole:
+            //exec();
+            break;
+
+        case RequestExecStepRole:
+            executeStepX();
+            break;
+
+        case RequestExecStepOutRole:
+            executeStepOutX();
+            break;
+
+        case RequestExecNextRole:
+            executeStepNextX();
+            break;
+
+        case RequestExecRunToLineRole:
+            //executeRunToLine();
+            QTC_ASSERT(false, /* FIXME ABC */);
+            break;
+
+        case RequestExecRunToFunctionRole:
+            //executeRunToFunction();
+            QTC_ASSERT(false, /* FIXME ABC */);
+            break;
+
+        case RequestExecReturnFromFunctionRole:
+            executeReturnX();
+            break;
+
+        case RequestExecJumpToLineRole:
+            //executeJumpToLine();
+            QTC_ASSERT(false, /* FIXME ABC */);
+            break;
+
+        case RequestExecWatchRole:
+            //exec();
+            QTC_ASSERT(false, /* FIXME ABC */);
+            break;
+
+        case RequestExecExitRole:
+            exitDebugger();
+            break;
+
+        case RequestExecSnapshotRole:
+            makeSnapshot();
+            break;
+
+        case RequestExecFrameDownRole:
+            frameDown();
+            break;
+
+        case RequestExecFrameUpRole:
+            frameUp();
+            break;
+
+        case RequestOperatedByInstructionTriggeredRole:
+            gotoLocation(stackHandler()->currentFrame(), true);
+            break;
+
+        case RequestExecuteCommandRole:
+            executeDebuggerCommand(value.toString());
+            break;
+    }
+}
+
 
 void DebuggerEngine::showModuleSymbols
     (const QString &moduleName, const Symbols &symbols)
@@ -613,11 +618,6 @@ void DebuggerEngine::executeWatchPointX()
 }
 
 /*
-void DebuggerEngine::executeDebuggerCommand()
-{
-    if (QAction *action = qobject_cast<QAction *>(sender()))
-        executeDebuggerCommand(action->data().toString());
-}
 void DebuggerManager::executeRunToLine()
 {
     ITextEditor *textEditor = d->m_plugin->currentTextEditor();
@@ -682,19 +682,13 @@ void DebuggerManager::executeJumpToLine()
 void DebuggerEngine::handleFinished()
 {
     modulesHandler()->removeAll();
-    //breakHandler()->setAllPending();
     stackHandler()->removeAll();
     threadsHandler()->removeAll();
     watchHandler()->cleanup();
 
     DebuggerEngine *sessionTemplate = plugin()->sessionTemplate();
-    if (sessionTemplate != this) {
-        BreakHandler *handler = sessionTemplate->breakHandler();
-        qDebug() << "MOVING BREAKPOINTS TO SESSION";
-        handler->removeAllBreakpoints();
-        handler->initializeFromTemplate(breakHandler());
-    }
-    breakHandler()->removeAllBreakpoints();
+    QTC_ASSERT(sessionTemplate != this, /**/);
+    breakHandler()->storeToTemplate(sessionTemplate->breakHandler());
 }
 
 const DebuggerStartParameters &DebuggerEngine::startParameters() const
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 43c7a39dce7..c10afff8be8 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -128,7 +128,6 @@ public:
     void startDebugger(DebuggerRunControl *runControl);
     virtual void startDebugger() {}
     virtual void exitDebugger() {}
-    virtual void abortDebugger() { exitDebugger(); }
     virtual void detachDebugger() {}
     virtual void updateWatchData(const WatchData & /* data */) { }
     virtual void executeStep() {}
@@ -187,8 +186,7 @@ public:
 public slots:
     // Convenience
     void showMessage(const QString &msg, int channel = LogDebug, int timeout = -1) const;
-    void showStatusMessage(const QString &msg, int timeout = -1) const
-        { showMessage(msg, StatusBar, timeout); }
+    void showStatusMessage(const QString &msg, int timeout = -1) const;
 
 public:
     DebuggerPlugin *plugin() const;
@@ -246,6 +244,7 @@ public:
     void notifyInferiorPid(qint64 pid);
     qint64 inferiorPid() const;
     bool isReverseDebugging() const;
+    void handleCommand(int role, const QVariant &value);
 
 public slots:
     void resetLocation();
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index e8c967ef969..cd9fa888349 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1702,13 +1702,7 @@ void GdbEngine::exitDebugger()
 {
     disconnectDebuggingHelperActions();
     shutdown();
-}
-
-void GdbEngine::abortDebugger()
-{
-    disconnectDebuggingHelperActions();
-    shutdown();
-    gdbProc()->kill();
+    //gdbProc()->kill();
 }
 
 int GdbEngine::currentFrame() const
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index c8f61077629..4dd23a004ad 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -105,7 +105,6 @@ private: ////////// General Interface //////////
     virtual void startDebugger();
     virtual unsigned debuggerCapabilities() const;
     virtual void exitDebugger();
-    virtual void abortDebugger();
     virtual void detachDebugger();
     virtual void shutdown();
 
-- 
GitLab