summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2017-12-13 14:20:49 +0100
committerDavid Schulz <david.schulz@qt.io>2017-12-20 09:32:18 +0000
commitb2052561cca185ca18b114110ae401ad9cb43aec (patch)
tree5509f14d6aeaf5a5d8414570e54adeb347a3f7a0
parent83e01b47779aed20385149e6e68eaf4dd4b1b23a (diff)
downloadqt-creator-b2052561cca185ca18b114110ae401ad9cb43aec.tar.gz
Debugger: improve evaluate expression with cdb
Replace Evaluate with AddSymbol and create a PyValue representing that expression Change-Id: Ibb8ab70c41df81e9d7d683b633a070caa03036d3 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--share/qtcreator/debugger/cdbbridge.py14
-rw-r--r--src/libs/qtcreatorcdbext/pycdbextmodule.cpp7
2 files changed, 8 insertions, 13 deletions
diff --git a/share/qtcreator/debugger/cdbbridge.py b/share/qtcreator/debugger/cdbbridge.py
index e34b8ed48e..7897028b64 100644
--- a/share/qtcreator/debugger/cdbbridge.py
+++ b/share/qtcreator/debugger/cdbbridge.py
@@ -225,13 +225,7 @@ class Dumper(DumperBase):
return None
def parseAndEvaluate(self, exp):
- val = cdbext.parseAndEvaluate(exp)
- if val is None:
- return None
- value = self.Value(self)
- value.type = self.lookupType('void *')
- value.ldata = val.to_bytes(8, sys.byteorder)
- return value
+ return self.fromNativeValue(cdbext.parseAndEvaluate(exp))
def isWindowsTarget(self):
return True
@@ -316,12 +310,12 @@ class Dumper(DumperBase):
if namespaceIndex > 0:
namespace = name[:namespaceIndex + 2]
self.qtNamespace = lambda: namespace
- self.qtCustomEventFunc = cdbext.parseAndEvaluate('%s!%sQObject::customEvent'
- % (self.qtCoreModuleName(), namespace))
+ self.qtCustomEventFunc = self.parseAndEvaluate('%s!%sQObject::customEvent'
+ % (self.qtCoreModuleName(), namespace)).address()
return namespace
def qtVersion(self):
- qtVersion = self.findValueByExpression('((void**)&%s)[2]' % self.qtHookDataSymbolName())
+ qtVersion = self.parseAndEvaluate('((void**)&%s)[2]' % self.qtHookDataSymbolName()).integer()
if qtVersion is None and self.qtCoreModuleName() is not None:
try:
versionValue = cdbext.call(self.qtCoreModuleName() + '!qVersion()')
diff --git a/src/libs/qtcreatorcdbext/pycdbextmodule.cpp b/src/libs/qtcreatorcdbext/pycdbextmodule.cpp
index 2b807d18ac..ef47f38368 100644
--- a/src/libs/qtcreatorcdbext/pycdbextmodule.cpp
+++ b/src/libs/qtcreatorcdbext/pycdbextmodule.cpp
@@ -106,12 +106,13 @@ static PyObject *cdbext_parseAndEvaluate(PyObject *, PyObject *args) // -> Value
ULONG oldExpressionSyntax;
control->GetExpressionSyntax(&oldExpressionSyntax);
control->SetExpressionSyntax(DEBUG_EXPR_CPLUSPLUS);
- DEBUG_VALUE value;
- HRESULT hr = control->Evaluate(expr, DEBUG_VALUE_INT64, &value, NULL);
+ IDebugSymbolGroup2 *symbolGroup = CurrentSymbolGroup::get();
+ ULONG index = DEBUG_ANY_ID;
+ HRESULT hr = symbolGroup->AddSymbol(expr, &index);
control->SetExpressionSyntax(oldExpressionSyntax);
if (FAILED(hr))
Py_RETURN_NONE;
- return Py_BuildValue("K", value.I64);
+ return createPythonObject(PyValue(index, symbolGroup));
}
static PyObject *cdbext_resolveSymbol(PyObject *, PyObject *args) // -> Value