summaryrefslogtreecommitdiff
path: root/src/plugins/debugger
diff options
context:
space:
mode:
authorhjk <qthjk@ovi.com>2013-01-09 14:51:49 +0100
committerhjk <qthjk@ovi.com>2013-01-09 16:02:46 +0100
commit2a0bb34911bfa2cdbb4f27f6aad0109f9543e45a (patch)
tree6959dc713076aa1f53e9cc0d7ff5983cf4efa937 /src/plugins/debugger
parent18408a5f58375a2c6e554e5a9ecc682f974e1ddf (diff)
downloadqt-creator-2a0bb34911bfa2cdbb4f27f6aad0109f9543e45a.tar.gz
Debugger: split fixCppExpression into some common and some cdb part
Task-number: QTCREATORBUG-8446 Change-Id: I79abc7f75779db15bd8700c085b9cd57411bb2e1 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/plugins/debugger')
-rw-r--r--src/plugins/debugger/debuggerconstants.h3
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp5
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp1
-rw-r--r--src/plugins/debugger/watchutils.cpp7
-rw-r--r--src/plugins/debugger/watchutils.h1
5 files changed, 14 insertions, 3 deletions
diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index a068d36c4d..06bada5c83 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -170,7 +170,8 @@ enum DebuggerCapabilities
OperateByInstructionCapability = 0x400000,
RunToLineCapability = 0x800000,
MemoryAddressCapability = 0x1000000,
- ShowModuleSectionsCapability = 0x200000
+ ShowModuleSectionsCapability = 0x200000,
+ WatchComplexExpressionsCapability = 0x400000 // Used to filter out challenges for cdb.
};
enum LogChannel
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index c3b7021bf9..f204b44862 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1166,7 +1166,10 @@ public slots:
int line, column;
exp = cppExpressionAt(textEditor, tc.position(), &line, &column);
}
- exp = fixCppExpression(exp);
+ if (currentEngine()->hasCapability(WatchComplexExpressionsCapability))
+ exp = removeObviousSideEffects(exp);
+ else
+ exp = fixCppExpression(exp);
if (exp.isEmpty())
return;
currentEngine()->watchHandler()->watchVariable(exp);
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 156e2fa5cd..59741ba305 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -2132,6 +2132,7 @@ bool GdbEngine::hasCapability(unsigned cap) const
| CatchCapability
| OperateByInstructionCapability
| RunToLineCapability
+ | WatchComplexExpressionsCapability
| MemoryAddressCapability))
return true;
diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp
index c46dd182a1..41aa9aa20f 100644
--- a/src/plugins/debugger/watchutils.cpp
+++ b/src/plugins/debugger/watchutils.cpp
@@ -820,7 +820,7 @@ QString cppExpressionAt(TextEditor::ITextEditor *editor, int pos,
// free debugger expression.
QString fixCppExpression(const QString &expIn)
{
- QString exp = expIn;
+ QString exp = expIn.trimmed();;
// Extract the first identifier, everything else is considered
// too dangerous.
int pos1 = 0, pos2 = exp.size();
@@ -838,7 +838,12 @@ QString fixCppExpression(const QString &expIn)
}
}
exp = exp.mid(pos1, pos2 - pos1);
+ return removeObviousSideEffects(exp);
+}
+QString removeObviousSideEffects(const QString &expIn)
+{
+ QString exp = expIn.trimmed();
if (exp.isEmpty() || exp.startsWith(QLatin1Char('#')) || !hasLetterOrNumber(exp) || isKeyWord(exp))
return QString();
diff --git a/src/plugins/debugger/watchutils.h b/src/plugins/debugger/watchutils.h
index 5e0f2a4d8f..87f72d1738 100644
--- a/src/plugins/debugger/watchutils.h
+++ b/src/plugins/debugger/watchutils.h
@@ -120,6 +120,7 @@ QString quoteUnprintableLatin1(const QByteArray &ba);
bool isCppEditor(Core::IEditor *editor);
QString cppExpressionAt(TextEditor::ITextEditor *editor, int pos,
int *line, int *column, QString *function = 0);
+QString removeObviousSideEffects(const QString &exp);
QString fixCppExpression(const QString &exp);
QString cppFunctionAt(const QString &fileName, int line);
// Decode string data as returned by the dumper helpers.