diff options
author | David Schulz <david.schulz@qt.io> | 2020-10-15 14:47:34 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2020-10-21 11:15:40 +0000 |
commit | 3b611e07f78d52edde6ecf4ffee8d33fc07bc99a (patch) | |
tree | 53b881d3f3263c28b0ba4cfb8f28472c1828a223 | |
parent | c9d2a8d69e9eed398ccc6e4973aae0158b869be4 (diff) |
Debugger: prevent calling functions with gdb on windows
and adjust tests accordingly
Change-Id: I172e08cfccc248eea06a94208c9e8e312d69e334
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 3 | ||||
-rw-r--r-- | share/qtcreator/debugger/qttypes.py | 15 | ||||
-rw-r--r-- | tests/auto/debugger/tst_dumpers.cpp | 24 |
3 files changed, 17 insertions, 25 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 5d32f8426c..f5ee86c349 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1117,7 +1117,8 @@ class Dumper(DumperBase): self.qtCustomEventPltFunc = self.findSymbol(sym) sym = '_ZNK%s7QObject8propertyEPKc' % strns - self.qtPropertyFunc = self.findSymbol(sym) + if not self.isWindowsTarget(): # prevent calling the property function on windows + self.qtPropertyFunc = self.findSymbol(sym) def assignValue(self, args): typeName = self.hexdecode(args['type']) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index aa3e9ecc0c..5fd48d816c 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -1982,18 +1982,9 @@ def qdump__QVariant(d, value): if d.isExpanded(): innerType = None with Children(d): - ev = d.parseAndEvaluate - p = None - if p is None: - # Without debug info. - symbol = d.mangleName(d.qtNamespace() + 'QMetaType::typeName') + 'i' - p = ev('((const char *(*)(int))%s)(%d)' % (symbol, variantType)) - #if p is None: - # p = ev('((const char *(*)(int))%sQMetaType::typeName)(%d)' % (ns, variantType)) - if p is None: - # LLDB on Linux - p = ev('((const char *(*)(int))QMetaType::typeName)(%d)' % variantType) - if p is None: + try: + p = d.call('const char *', value, 'typeName') + except: d.putSpecialValue('notcallable') return None ptr = p.pointer() diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index d1a70c2ba2..657dadb2d8 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -3992,22 +3992,22 @@ void tst_Dumpers::dumper_data() + Check("my.1.value", "<1 items>", "@QStringList") + Check("my.1.value.0", "[0]", "\"World\"", "@QString") //+ CheckType("v2", "@QVariant (MyType)") - + Check("v2.data.0.key", "1", "unsigned int") % NoCdbEngine - + Check("v2.data.0.value", "<1 items>", "@QStringList") % NoCdbEngine - + Check("v2.data.0.value.0", "[0]", "\"Hello\"", "@QString") % NoCdbEngine - + Check("v2.data.1.key", "3", "unsigned int") % NoCdbEngine - + Check("v2.data.1.value", "<1 items>", "@QStringList") % NoCdbEngine - + Check("v2.data.1.value.0", "[0]", "\"World\"", "@QString") % NoCdbEngine + + Check("v2.data.0.key", "1", "unsigned int") % NeedsInferiorCall + + Check("v2.data.0.value", "<1 items>", "@QStringList") % NeedsInferiorCall + + Check("v2.data.0.value.0", "[0]", "\"Hello\"", "@QString") % NeedsInferiorCall + + Check("v2.data.1.key", "3", "unsigned int") % NeedsInferiorCall + + Check("v2.data.1.value", "<1 items>", "@QStringList") % NeedsInferiorCall + + Check("v2.data.1.value.0", "[0]", "\"World\"", "@QString") % NeedsInferiorCall + Check("list", "<3 items>", "@QList<int>") + Check("list.0", "[0]", "1", "int") + Check("list.1", "[1]", "2", "int") + Check("list.2", "[2]", "3", "int") //+ Check("v3", "", "@QVariant (@QList<int>)") - + Check("v3.data", "<3 items>", TypePattern(".*QList<int>")) % NoCdbEngine - + Check("v3.data.0", "[0]", "1", "int") % NoCdbEngine - + Check("v3.data.1", "[1]", "2", "int") % NoCdbEngine - + Check("v3.data.2", "[2]", "3", "int") % NoCdbEngine; + + Check("v3.data", "<3 items>", TypePattern(".*QList<int>")) % NeedsInferiorCall + + Check("v3.data.0", "[0]", "1", "int") % NeedsInferiorCall + + Check("v3.data.1", "[1]", "2", "int") % NeedsInferiorCall + + Check("v3.data.2", "[2]", "3", "int") % NeedsInferiorCall; QTest::newRow("QVariant2") @@ -4221,8 +4221,8 @@ void tst_Dumpers::dumper_data() //+ Check("ha1.protocol", "IPv4Protocol", // "@QAbstractSocket::NetworkLayerProtocol") % LldbEngine + Check("ha1.scopeId", "\"\"", "@QString") - + Check("var", "", "@QVariant (@QHostAddress)") % NoCdbEngine - + Check("var.data", ValuePattern(".*127.0.0.1.*"), "@QHostAddress") % NoCdbEngine; + + Check("var", "", "@QVariant (@QHostAddress)") % NeedsInferiorCall + + Check("var.data", ValuePattern(".*127.0.0.1.*"), "@QHostAddress") % NeedsInferiorCall; QTest::newRow("QVariantList") |