diff options
-rw-r--r-- | src/plugins/debugger/cdb/cdbengine.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/sessionengine.cpp | 7 | ||||
-rw-r--r-- | src/plugins/debugger/sessionengine.h | 1 | ||||
-rw-r--r-- | src/plugins/debugger/watchhandler.cpp | 3 | ||||
-rw-r--r-- | src/plugins/debugger/watchwindow.cpp | 5 |
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); |