Debugger: Make GDB dumper tests pass with Qt release builds

Change-Id: I45ae41486b8081bb803290895e942a71d41d5c0d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-12-08 12:19:19 +01:00
parent 8044e7c505
commit 73f2ea11dd
2 changed files with 16 additions and 7 deletions

View File

@@ -3847,8 +3847,6 @@ class DumperBase():
return self.knownArrayTypeSize() return self.knownArrayTypeSize()
if typish == 'QObject': if typish == 'QObject':
return 2 * self.ptrSize() return 2 * self.ptrSize()
if typish == 'QStandardItemData':
return 4 * self.ptrSize() if self.qtVersion() >= 0x060000 else 2 * self.ptrSize()
if typish == 'Qt::ItemDataRole': if typish == 'Qt::ItemDataRole':
return 4 return 4
if typish == 'QChar': if typish == 'QChar':
@@ -3860,7 +3858,12 @@ class DumperBase():
def createType(self, typish, size=None): def createType(self, typish, size=None):
if isinstance(typish, self.Type): if isinstance(typish, self.Type):
#typish.check() #typish.check()
if hasattr(typish, 'lbitsize') and typish.lbitsize is not None and typish.lbitsize > 0:
return typish return typish
# Size 0 is sometimes reported by GDB but doesn't help at all.
# Force using the fallback:
typish = typish.name
if isinstance(typish, str): if isinstance(typish, str):
ns = self.qtNamespace() ns = self.qtNamespace()
typish = typish.replace('@', ns) typish = typish.replace('@', ns)
@@ -3875,6 +3878,8 @@ class DumperBase():
tdata = self.typeData.get(typish, None) tdata = self.typeData.get(typish, None)
if tdata is not None: if tdata is not None:
if tdata.lbitsize is not None:
if tdata.lbitsize > 0:
return self.Type(self, typish) return self.Type(self, typish)
knownType = self.lookupType(typish) knownType = self.lookupType(typish)
@@ -3888,6 +3893,9 @@ class DumperBase():
tdata.name = typish tdata.name = typish
tdata.typeId = typish tdata.typeId = typish
tdata.templateArguments = self.listTemplateParameters(typish) tdata.templateArguments = self.listTemplateParameters(typish)
if typish.endswith('*'):
tdata.code = TypeCode.Pointer
tdata.lbitsize = 8 * self.ptrSize()
if size is not None: if size is not None:
tdata.lbitsize = 8 * size tdata.lbitsize = 8 * size

View File

@@ -249,9 +249,10 @@ def qdump__QStandardItemData(d, value):
def qdump__QStandardItem(d, value): def qdump__QStandardItem(d, value):
d.createType('@QStandardItemData') # warm up cache # warm up cache
d.createType('@QStandardItem') data_size = 4 * d.ptrSize() if d.qtVersion() >= 0x060000 else 2 * d.ptrSize()
d.createType('@QStandardItem*') d.createType('@QStandardItemData', data_size)
vtable, dptr = value.split('pp') vtable, dptr = value.split('pp')
# There used to be a virtual destructor that got removed in # There used to be a virtual destructor that got removed in
# 88b6abcebf29b455438 on Apr 18 17:01:22 2017 # 88b6abcebf29b455438 on Apr 18 17:01:22 2017