summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp2
-rw-r--r--src/plugins/debugger/sessionengine.cpp7
-rw-r--r--src/plugins/debugger/sessionengine.h1
-rw-r--r--src/plugins/debugger/watchhandler.cpp3
-rw-r--r--src/plugins/debugger/watchwindow.cpp5
5 files changed, 16 insertions, 2 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index 8d8475a5ad..520bc5110f 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -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;
}
diff --git a/src/plugins/debugger/sessionengine.cpp b/src/plugins/debugger/sessionengine.cpp
index 9914ff33ed..a822df3522 100644
--- a/src/plugins/debugger/sessionengine.cpp
+++ b/src/plugins/debugger/sessionengine.cpp
@@ -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
diff --git a/src/plugins/debugger/sessionengine.h b/src/plugins/debugger/sessionengine.h
index 9bdc833bc1..c00d6f52c9 100644
--- a/src/plugins/debugger/sessionengine.h
+++ b/src/plugins/debugger/sessionengine.h
@@ -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; }
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 1c5b6cdad9..00dd7c3a4b 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -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);
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 878b0a11db..253f41e912 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -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);