diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 8d8475a5ad7de4277990ea8a41d357dfe4e3d6d7..520bc5110fb213c8cb80e2965b0290e14b760279 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 9914ff33ed87c3dc15171573c7d1974c888fab0a..a822df35229341bdedd5741e52d5ded782d90413 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 9bdc833bc1dc4bed0bb6699a179603b874717d9c..c00d6f52c9027dbe18fa01dd2f6b8d45700c2ee2 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 1c5b6cdad9739a58f04e9d0adfc9bbddf2288509..00dd7c3a4b7c6697b21d1444381e7d9a05b2dce8 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 878b0a11db404dceeb1e947ea7091c4fb197f1f4..253f41e912db74913b82193d5d3feeb472eadea4 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);