forked from qt-creator/qt-creator
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:
@@ -1765,29 +1765,50 @@ 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.
|
|
||||||
ldata = stringdata + index
|
if revision >= 9: # Qt 6.
|
||||||
return self.extractCString(ldata).decode('utf8')
|
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):
|
def putSortGroup(self, sortorder):
|
||||||
if not self.isCli:
|
if not self.isCli:
|
||||||
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:
|
||||||
dataPtr = self.extractPointer(metaObjectPtr + 2 * self.ptrSize())
|
if self.qtVersion() >= 0x060000:
|
||||||
index = self.extractInt(dataPtr + 4 * handle)
|
revision = 9
|
||||||
revision = 7 if self.qtVersion() >= 0x050000 else 6
|
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)
|
name = self.metaString(metaObjectPtr, index, revision)
|
||||||
self.putValue(name)
|
self.putValue(name)
|
||||||
self.putExpandable()
|
self.putExpandable()
|
||||||
|
Reference in New Issue
Block a user