Debugger: defer type resolve again for the cdb debugger backend

Task-number: QTCREATORBUG-29833
Change-Id: I671359f84d3f4d78d051f6a087776ceab7d7460d
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
David Schulz
2024-06-13 15:07:36 +02:00
parent 1aa4b401f1
commit 4ded08dd38
2 changed files with 15 additions and 10 deletions

View File

@@ -172,15 +172,17 @@ class Dumper(DumperBase):
self.type_name_cache[typeid] = nativeType.name() self.type_name_cache[typeid] = nativeType.name()
self.type_code_cache[typeid] = code self.type_code_cache[typeid] = code
self.type_target_cache[typeid] = self.typeid_for_string(targetName) self.type_target_cache[typeid] = self.typeid_for_string(targetName)
if nativeType.resolved():
self.type_size_cache[typeid] = nativeType.bitsize() // 8 self.type_size_cache[typeid] = nativeType.bitsize() // 8
return typeid return typeid
code = TypeCode.Struct code = TypeCode.Struct
self.type_name_cache[typeid] = nativeType.name() self.type_name_cache[typeid] = nativeType.name()
if nativeType.resolved():
self.type_size_cache[typeid] = nativeType.bitsize() // 8 self.type_size_cache[typeid] = nativeType.bitsize() // 8
self.type_code_cache[typeid] = code
self.type_modulename_cache[typeid] = nativeType.module() self.type_modulename_cache[typeid] = nativeType.module()
self.type_code_cache[typeid] = code
self.type_enum_display_cache[typeid] = lambda intval, addr, form: \ self.type_enum_display_cache[typeid] = lambda intval, addr, form: \
self.nativeTypeEnumDisplay(nativeType, intval, form) self.nativeTypeEnumDisplay(nativeType, intval, form)
return typeid return typeid
@@ -549,7 +551,6 @@ class Dumper(DumperBase):
return return
self.putAddress(value.address()) self.putAddress(value.address())
self.putField('size', self.type_size(value.typeid))
if typeobj.code == TypeCode.Function: if typeobj.code == TypeCode.Function:
#DumperBase.warn('FUNCTION VALUE: %s' % value) #DumperBase.warn('FUNCTION VALUE: %s' % value)

View File

@@ -2446,7 +2446,7 @@ typename))
self.checkIntType(base) self.checkIntType(base)
self.checkIntType(n) self.checkIntType(n)
inner_typeid = self.typeid_for_typish(inner_typish) inner_typeid = self.typeid_for_typish(inner_typish)
inner_size = self.type_size_cache.get(inner_typeid, None) inner_size = self.type_size(inner_typeid)
self.putNumChild(n) self.putNumChild(n)
#self.warn('ADDRESS: 0x%x INNERSIZE: %s INNERTYPE: %s' % (base, inner_size, inner_typeid)) #self.warn('ADDRESS: 0x%x INNERSIZE: %s INNERTYPE: %s' % (base, inner_size, inner_typeid))
enc = self.type_encoding_cache.get(inner_typeid, None) enc = self.type_encoding_cache.get(inner_typeid, None)
@@ -3565,7 +3565,9 @@ typename))
return target_typeid return target_typeid
self.type_code_cache[typeid] = TypeCode.Typedef self.type_code_cache[typeid] = TypeCode.Typedef
self.type_target_cache[typeid] = target_typeid self.type_target_cache[typeid] = target_typeid
self.type_size_cache[typeid] = self.type_size_cache.get(target_typeid, None) size = self.type_size_cache.get(target_typeid, None)
if size is not None:
self.type_size_cache[typeid] = size
return typeid return typeid
def createType(self, typish, size=None): def createType(self, typish, size=None):
@@ -3711,7 +3713,7 @@ typename))
typeid = self.cheap_typeid_from_name_nons(typename) typeid = self.cheap_typeid_from_name_nons(typename)
if typeid: if typeid:
size = self.type_size_cache.get(typeid, None) size = self.type_size(typeid)
if size is not None: if size is not None:
return size, typeid return size, typeid
@@ -3719,7 +3721,7 @@ typename))
self.warn("LOOKUP FIELD TYPE: %s TYPEOBJ: %s" % (typename, typeobj)) self.warn("LOOKUP FIELD TYPE: %s TYPEOBJ: %s" % (typename, typeobj))
if typeobj is not None: if typeobj is not None:
typeid = typeobj.typeid typeid = typeobj.typeid
size = self.type_size_cache.get(typeid, None) size = self.type_size(typeid)
if size is not None: if size is not None:
return size, typeid return size, typeid
@@ -3950,8 +3952,10 @@ typename))
if size is not None: if size is not None:
return size return size
if size is None:
nativeType = self.type_nativetype(typeid) nativeType = self.type_nativetype(typeid)
if self.isCdb:
size = nativeType.bitsize() // 8
else:
if not self.type_size_cache.get(typeid): if not self.type_size_cache.get(typeid):
self.from_native_type(nativeType) self.from_native_type(nativeType)
size = self.type_size_cache.get(typeid, None) size = self.type_size_cache.get(typeid, None)