From e65b9cde28aac68d501f02201dd3ae4c15f545f0 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 26 Nov 2020 12:37:45 +0100 Subject: [PATCH] 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 --- share/qtcreator/debugger/dumper.py | 45 ++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index ecdd36372a0..28c668b699d 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1765,29 +1765,50 @@ class DumperBase(): def metaString(self, metaObjectPtr, index, revision): ptrSize = self.ptrSize() stringdata = self.extractPointer(toInteger(metaObjectPtr) + ptrSize) - if revision >= 7: # Qt 5. - byteArrayDataSize = 24 if ptrSize == 8 else 16 - literal = stringdata + toInteger(index) * byteArrayDataSize - ldata, lsize, lalloc = self.qArrayDataHelper(literal) + + def unpackString(base, size): 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') except: return '' - else: # Qt 4. - ldata = stringdata + index - return self.extractCString(ldata).decode('utf8') + + 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 + return self.extractCString(ldata).decode('utf8') def putSortGroup(self, sortorder): if not self.isCli: self.putField('sortgroup', sortorder) 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: - dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize()) - index = self.extractInt(dataPtr + 4 * handle) - revision = 7 if self.qtVersion() >= 0x050000 else 6 + 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()) + index = self.extractInt(dataPtr + 4 * handle) + 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) self.putValue(name) self.putExpandable()