OSDN Git Service

Debugger: Remove 'friend gdbengine' from stackhandler.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 22 Nov 2010 16:06:08 +0000 (17:06 +0100)
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 22 Nov 2010 16:06:08 +0000 (17:06 +0100)
Preparing the introduction of tooltips for the new
CDB engine. Fix some breakpoint states in CDB.

src/plugins/debugger/cdb/cdbengine.cpp
src/plugins/debugger/cdb2/cdbengine2.cpp
src/plugins/debugger/gdb/gdbengine.cpp
src/plugins/debugger/watchhandler.cpp
src/plugins/debugger/watchhandler.h

index 08341eb..ab2172f 100644 (file)
@@ -1096,9 +1096,10 @@ void CdbEngine::assignValueInDebugger(const WatchData *w, const QString &expr, c
                                    v.toString();
         }
         // Update view
-        if (WatchData *fwd = watchHandler()->findItem(w->iname)) {
-            fwd->setValue(newValueObtained);
-            watchHandler()->insertData(*fwd);
+        if (const WatchData *fwd = watchHandler()->findItem(w->iname)) {
+            WatchData modified = *fwd;
+            modified.setValue(newValueObtained);
+            watchHandler()->insertData(modified);
             watchHandler()->updateWatchers();
         }
         success = true;
@@ -1319,6 +1320,7 @@ bool CdbEngine::attemptBreakpointSynchronizationI(QString *errorMessage)
             }
             break;
         case BreakpointRemoveRequested:
+            handler->notifyBreakpointRemoveProceeding(id);
             handler->notifyBreakpointRemoveOk(id);
             break;
         case BreakpointInserted:
index 25d4d80..f89383b 100644 (file)
 #include "debuggercore.h"
 #include "registerhandler.h"
 #include "debuggeragents.h"
+#include "debuggertooltip.h"
 #include "cdbparsehelpers.h"
 #include "watchutils.h"
 #include "gdb/gdbmi.h"
 #include "shared/cdbsymbolpathlisteditor.h"
 
 #include <coreplugin/icore.h>
+#include <texteditor/itexteditor.h>
 
 #include <utils/synchronousprocess.h>
 #include <utils/winutils.h>
@@ -328,9 +330,26 @@ void CdbEngine::syncOperateByInstruction(bool operateByInstruction)
 
 void CdbEngine::setToolTipExpression(const QPoint &mousePos, TextEditor::ITextEditor *editor, int cursorPos)
 {
+    if (debug)
+        qDebug() << Q_FUNC_INFO;
+    // Need a stopped debuggee and a cpp file in a valid frame
+    if (state() != InferiorStopOk || !isCppEditor(editor) || stackHandler()->currentIndex() < 0)
+        return;
+    // Determine expression and function
+    int line;
+    int column;
+    QString function;
+    const QString exp = cppExpressionAt(editor, cursorPos, &line, &column, &function);
+    // Are we in the current stack frame
+    if (function.isEmpty() || exp.isEmpty() || function != stackHandler()->currentFrame().function)
+        return;
+    // No numerical or any other expressions [yet]
+    if (!(exp.at(0).isLetter() || exp.at(0) == QLatin1Char('_')))
+        return;
+    const QByteArray iname = QByteArray("local.") + exp.toAscii();
+    const QModelIndex index = watchHandler()->itemIndex(iname);
+    Q_UNUSED(index)
     Q_UNUSED(mousePos)
-    Q_UNUSED(editor)
-    Q_UNUSED(cursorPos)
 }
 
 void CdbEngine::setupEngine()
@@ -1678,6 +1697,7 @@ void CdbEngine::attemptBreakpointSynchronization()
             }
             break;
         case BreakpointRemoveRequested:
+            handler->notifyBreakpointRemoveProceeding(id);
             handler->notifyBreakpointRemoveOk(id);
             break;
         case BreakpointInserted:
index bdb6eb2..8fb8fd5 100644 (file)
@@ -3268,22 +3268,20 @@ bool GdbEngine::supportsThreads() const
 
 bool GdbEngine::showToolTip()
 {
-    QByteArray iname = tooltipIName(m_toolTipExpression);
+    const QByteArray iname = tooltipIName(m_toolTipExpression);
 
     if (!debuggerCore()->boolSetting(UseToolTipsInMainEditor)) {
         watchHandler()->removeData(iname);
         return true;
     }
 
-    WatchModel *model = watchHandler()->model(TooltipsWatch);
-    WatchItem *item = model->findItem(iname, model->rootItem());
-    if (!item) {
+    const QModelIndex index = watchHandler()->itemIndex(iname);
+    if (!index.isValid()) {
         watchHandler()->removeData(iname);
         hideDebuggerToolTip();
         return false;
     }
-    QModelIndex index = model->watchIndex(item);
-    showDebuggerToolTip(m_toolTipPos, model, index, m_toolTipExpression);
+    showDebuggerToolTip(m_toolTipPos, watchHandler()->model(TooltipsWatch), index, m_toolTipExpression);
     return true;
 }
 
index 484b3a2..4c8f3ea 100644 (file)
@@ -1590,13 +1590,29 @@ WatchModel *WatchHandler::modelForIName(const QByteArray &iname) const
     return 0;
 }
 
-WatchData *WatchHandler::findItem(const QByteArray &iname) const
+const WatchData *WatchHandler::watchData(WatchType type, const QModelIndex &index) const
+{
+    if (index.isValid())
+        if (const WatchModel *m = model(type))
+            return m->watchItem(index);
+    return 0;
+}
+
+const WatchData *WatchHandler::findItem(const QByteArray &iname) const
 {
     const WatchModel *model = modelForIName(iname);
     QTC_ASSERT(model, return 0);
     return model->findItem(iname, model->m_root);
 }
 
+QModelIndex WatchHandler::itemIndex(const QByteArray &iname) const
+{
+    if (const WatchModel *model = modelForIName(iname))
+        if (WatchItem *item = model->findItem(iname, model->m_root))
+            return model->watchIndex(item);
+    return QModelIndex();
+}
+
 void WatchHandler::setFormat(const QByteArray &type, int format)
 {
     if (format == -1)
index 3bffa64..2b5f8bc 100644 (file)
@@ -87,7 +87,6 @@ private:
     void fetchMore(const QModelIndex &parent);
 
     friend class WatchHandler;
-    friend class GdbEngine;
 
     WatchItem *watchItem(const QModelIndex &) const;
     QModelIndex watchIndex(const WatchItem *needle) const;
@@ -151,7 +150,10 @@ public:
     void insertData(const WatchData &data);
     void insertBulkData(const QList<WatchData> &data);
     void removeData(const QByteArray &iname);
-    WatchData *findItem(const QByteArray &iname) const;
+
+    const WatchData *watchData(WatchType type, const QModelIndex &) const;
+    const WatchData *findItem(const QByteArray &iname) const;
+    QModelIndex itemIndex(const QByteArray &iname) const;
 
     static void loadSessionData();
     static void saveSessionData();