OSDN Git Service

Debugger[CDB]: Do not evaluate watch expressions at all.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 11 Oct 2010 10:59:49 +0000 (12:59 +0200)
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>
Mon, 11 Oct 2010 10:59:49 +0000 (12:59 +0200)
setError() on them instead (should there be any from
a session mixup). Give the session engine watcher
capabilities and ensure 'Remove watch item' is enabled
for the session engine by checking the debugger state.

Reviewed-by: hjk
src/plugins/debugger/cdb/cdbengine.cpp
src/plugins/debugger/sessionengine.cpp
src/plugins/debugger/sessionengine.h
src/plugins/debugger/watchhandler.cpp
src/plugins/debugger/watchwindow.cpp

index 8d8475a..520bc51 100644 (file)
@@ -705,7 +705,7 @@ void CdbEngine::updateWatchData(const WatchData &incomplete, const WatchUpdateFl
 
     if (incomplete.iname.startsWith("watch.")) {
         WatchData watchData = incomplete;
-        evaluateWatcher(&watchData);
+        watchData.setError(tr("<not supported>"));
         watchHandler()->insertData(watchData);
         return;
     }
index 9914ff3..a822df3 100644 (file)
@@ -30,6 +30,7 @@
 #include "sessionengine.h"
 #include "breakhandler.h"
 #include "watchhandler.h"
+#include "debuggerconstants.h"
 
 #include <utils/qtcassert.h>
 
@@ -64,6 +65,12 @@ void SessionEngine::saveSessionData()
     breakHandler()->saveSessionData();
 }
 
+unsigned SessionEngine::debuggerCapabilities() const
+{
+    return DebuggerEngine::debuggerCapabilities()
+            | AddWatcherCapability | WatchpointCapability;
+}
+
 } // namespace Internal
 } // namespace Debugger
 
index 9bdc833..c00d6f5 100644 (file)
@@ -51,6 +51,7 @@ public:
     virtual void shutdownEngine() {}
     virtual void shutdownInferior() {}
     virtual void executeDebuggerCommand(const QString &command);
+    virtual unsigned debuggerCapabilities() const;
 
     virtual bool isSessionEngine() const { return true; }
 
index 1c5b6cd..00dd7c3 100644 (file)
@@ -704,6 +704,9 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const
 
         case EngineActionsEnabledRole:
             return engine()->debuggerActionsEnabled();
+
+       case EngineStateRole:
+            return QVariant(int(engine()->state()));
     }
 
     const WatchItem *item = watchItem(idx);
index 878b0a1..253f41e 100644 (file)
@@ -296,6 +296,7 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
     const unsigned engineCapabilities = modelData(EngineCapabilitiesRole).toUInt();
     const bool canHandleWatches =
         actionsEnabled && (engineCapabilities & AddWatcherCapability);
+    const DebuggerState state = static_cast<DebuggerState>(modelData(EngineStateRole).toInt());
 
     QMenu menu;
     QAction *actInsertNewWatchItem = menu.addAction(tr("Insert New Watch Item"));
@@ -352,10 +353,12 @@ void WatchWindow::contextMenuEvent(QContextMenuEvent *ev)
     QAction *actWatchExpression = new QAction(actionName, &menu);
     actWatchExpression->setEnabled(canHandleWatches && !exp.isEmpty());
 
+    // Can remove watch if engine can handle it or session engine.
     actionName = exp.isEmpty() ? tr("Remove Watch Expression")
         : tr("Remove Watch Expression \"%1\"").arg(exp);
     QAction *actRemoveWatchExpression = new QAction(actionName, &menu);
-    actRemoveWatchExpression->setEnabled(canHandleWatches && !exp.isEmpty());
+    actRemoveWatchExpression->setEnabled((canHandleWatches || state == DebuggerNotReady)
+                                         && !exp.isEmpty());
 
     if (m_type == LocalsType)
         menu.addAction(actWatchExpression);