aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2020-10-15 14:47:34 +0200
committerDavid Schulz <david.schulz@qt.io>2020-10-21 11:15:40 +0000
commit3b611e07f78d52edde6ecf4ffee8d33fc07bc99a (patch)
tree53b881d3f3263c28b0ba4cfb8f28472c1828a223
parentc9d2a8d69e9eed398ccc6e4973aae0158b869be4 (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.py3
-rw-r--r--share/qtcreator/debugger/qttypes.py15
-rw-r--r--tests/auto/debugger/tst_dumpers.cpp24
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")