Debugger: Partially adapt QObject dumper to Qt 6

This makes meta method and property names visible again.

Task-number: QTCREATORBUG-24098
Change-Id: I2e0522396a5e91be43ae6b850217b9153b29a962
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-11-26 12:37:45 +01:00
parent f772f09853
commit e65b9cde28

View File

@@ -1765,16 +1765,24 @@ class DumperBase():
def metaString(self, metaObjectPtr, index, revision): def metaString(self, metaObjectPtr, index, revision):
ptrSize = self.ptrSize() ptrSize = self.ptrSize()
stringdata = self.extractPointer(toInteger(metaObjectPtr) + ptrSize) stringdata = self.extractPointer(toInteger(metaObjectPtr) + ptrSize)
if revision >= 7: # Qt 5.
byteArrayDataSize = 24 if ptrSize == 8 else 16 def unpackString(base, size):
literal = stringdata + toInteger(index) * byteArrayDataSize
ldata, lsize, lalloc = self.qArrayDataHelper(literal)
try: try:
s = struct.unpack_from('%ds' % lsize, self.readRawMemory(ldata, lsize))[0] s = struct.unpack_from('%ds' % size, self.readRawMemory(base, size))[0]
return s if sys.version_info[0] == 2 else s.decode('utf8') return s if sys.version_info[0] == 2 else s.decode('utf8')
except: except:
return '<not available>' return '<not available>'
else: # Qt 4.
if revision >= 9: # Qt 6.
pos, size = self.split('II', stringdata + 8 * index)
return unpackString(stringdata + pos, size)
if revision >= 7: # Qt 5.
byteArrayDataSize = 24 if ptrSize == 8 else 16
literal = stringdata + toInteger(index) * byteArrayDataSize
base, size, _ = self.qArrayDataHelper(literal)
return unpackString(base, size)
ldata = stringdata + index ldata = stringdata + index
return self.extractCString(ldata).decode('utf8') return self.extractCString(ldata).decode('utf8')
@@ -1783,11 +1791,24 @@ class DumperBase():
self.putField('sortgroup', sortorder) self.putField('sortgroup', sortorder)
def putQMetaStuff(self, value, origType): def putQMetaStuff(self, value, origType):
(metaObjectPtr, handle) = value.split('pI') if self.qtVersion() >= 0x060000:
metaObjectPtr, handle = value.split('pp')
else:
metaObjectPtr, handle = value.split('pI')
if metaObjectPtr != 0: if metaObjectPtr != 0:
if self.qtVersion() >= 0x060000:
revision = 9
name, alias, flags, keyCount, data = self.split('IIIII', handle)
index = name
elif self.qtVersion() >= 0x050000:
revision = 7
dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize()) dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize())
index = self.extractInt(dataPtr + 4 * handle) index = self.extractInt(dataPtr + 4 * handle)
revision = 7 if self.qtVersion() >= 0x050000 else 6 else:
revision = 6
dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize())
index = self.extractInt(dataPtr + 4 * handle)
#self.putValue("index: %s rev: %s" % (index, revision))
name = self.metaString(metaObjectPtr, index, revision) name = self.metaString(metaObjectPtr, index, revision)
self.putValue(name) self.putValue(name)
self.putExpandable() self.putExpandable()