Debugger: Fix QObject property display with Qt 6

Task-number: QTCREATORBUG-24098
Change-Id: I6e1013fe39208ef6e9ba792e6b2fb745eb5e3108
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-12-03 16:33:02 +01:00
parent ca33079e91
commit eac85f8261
2 changed files with 33 additions and 17 deletions

View File

@@ -1743,13 +1743,6 @@ class DumperBase():
data = array + begin * stepSize data = array + begin * stepSize
return data, size return data, size
def listChildrenGenerator(self, addr, innerType):
stepSize = self.ptrSize()
data, size = self.listData(addr)
for i in range(size):
yield self.createValue(data + i * stepSize, innerType)
#yield self.createValue(data + i * stepSize, 'void*')
def vectorChildrenGenerator(self, value, innerType): def vectorChildrenGenerator(self, value, innerType):
data, size = self.vectorData(value) data, size = self.vectorData(value)
for i in range(size): for i in range(size):
@@ -2035,7 +2028,10 @@ class DumperBase():
with Children(self): with Children(self):
# Static properties. # Static properties.
for i in range(propertyCount): for i in range(propertyCount):
t = self.split('III', dataPtr + properties * 4 + 12 * i) if self.qtVersion() >= 0x60000:
t = self.split('IIIII', dataPtr + properties * 4 + 20 * i)
else:
t = self.split('III', dataPtr + properties * 4 + 12 * i)
name = self.metaString(metaObjectPtr, t[0], revision) name = self.metaString(metaObjectPtr, t[0], revision)
if qobject and self.qtPropertyFunc: if qobject and self.qtPropertyFunc:
# LLDB doesn't like calling it on a derived class, possibly # LLDB doesn't like calling it on a derived class, possibly
@@ -2064,19 +2060,38 @@ class DumperBase():
# Dynamic properties. # Dynamic properties.
if extraData: if extraData:
def list6Generator(addr, innerType):
data, size = self.listData(addr)
for i in range(size):
yield self.createValue(data + i * innerType.size(), innerType)
def list5Generator(addr, innerType):
data, size = self.listData(addr)
for i in range(size):
yield self.createValue(data + i * ptrSize, innerType)
def vectorGenerator(addr, innerType):
data, size = self.vectorData(addr)
for i in range(size):
yield self.createValue(data + i * innerType.size(), innerType)
byteArrayType = self.createType('@QByteArray') byteArrayType = self.createType('@QByteArray')
variantType = self.createType('@QVariant') variantType = self.createType('@QVariant')
if self.qtVersion() >= 0x50600: if self.qtVersion() >= 0x60000:
values = self.vectorChildrenGenerator( values = vectorGenerator(extraData + 3 * ptrSize, variantType)
extraData + 2 * ptrSize, variantType) elif self.qtVersion() >= 0x50600:
values = vectorGenerator(extraData + 2 * ptrSize, variantType)
elif self.qtVersion() >= 0x50000: elif self.qtVersion() >= 0x50000:
values = self.listChildrenGenerator( values = list5Generator(extraData + 2 * ptrSize, variantType)
extraData + 2 * ptrSize, variantType)
else: else:
values = self.listChildrenGenerator( values = list5Generator(extraData + 2 * ptrSize,
extraData + 2 * ptrSize, variantType.pointer()) variantType.pointer())
names = self.listChildrenGenerator(
extraData + ptrSize, byteArrayType) if self.qtVersion() >= 0x60000:
names = list6Generator(extraData, byteArrayType)
else:
names = list5Generator(extraData + ptrSize, byteArrayType)
for (k, v) in zip(names, values): for (k, v) in zip(names, values):
with SubItem(self, propertyCount + dynamicPropertyCount): with SubItem(self, propertyCount + dynamicPropertyCount):
if not self.isCli: if not self.isCli:

View File

@@ -3101,6 +3101,7 @@ void tst_Dumpers::dumper_data()
+ Check5("mm", "destroyed", "@QMetaMethod") + Check5("mm", "destroyed", "@QMetaMethod")
+ Check4("mm", "destroyed(QObject*)", "@QMetaMethod") + Check4("mm", "destroyed(QObject*)", "@QMetaMethod")
+ Check("mm.handle", "14", TypeDef("unsigned int", "uint")) + Check("mm.handle", "14", TypeDef("unsigned int", "uint"))
% QtVersion(0, 0x5ffff) // Gone in Qt 6
+ Check("mp", "objectName", "@QMetaProperty"); + Check("mp", "objectName", "@QMetaProperty");