Debugger: Respect "Use Dynamic Object Type for Display"

Broke in 5efa84830b.

Task-number: QTCREATORBUG-24280
Change-Id: Ice4b9d826d2402efb354180886d35926a2513e5a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Orgad Shaneh
2020-06-29 09:34:57 +03:00
committed by Orgad Shaneh
parent 94f9544df5
commit 00e814fdd1
2 changed files with 21 additions and 10 deletions

View File

@@ -3201,13 +3201,17 @@ class DumperBase():
val.laddress = self.pointer() val.laddress = self.pointer()
if val.laddress is None and self.laddress is not None: if val.laddress is None and self.laddress is not None:
val.laddress = self.laddress val.laddress = self.laddress
val.type = self.dumper.nativeDynamicType(val.laddress, self.type.dereference()) val.type = self.type.dereference()
if self.dumper.useDynamicType:
val.type = self.dumper.nativeDynamicType(val.laddress, val.type)
else: else:
val = self.dumper.nativeValueDereferenceReference(self) val = self.dumper.nativeValueDereferenceReference(self)
elif self.type.code == TypeCode.Pointer: elif self.type.code == TypeCode.Pointer:
if self.nativeValue is None: if self.nativeValue is None:
val.laddress = self.pointer() val.laddress = self.pointer()
val.type = self.dumper.nativeDynamicType(val.laddress, self.type.dereference()) val.type = self.type.dereference()
if self.dumper.useDynamicType:
val.type = self.dumper.nativeDynamicType(val.laddress, val.type)
else: else:
val = self.dumper.nativeValueDereferencePointer(self) val = self.dumper.nativeValueDereferencePointer(self)
else: else:
@@ -3662,7 +3666,9 @@ class DumperBase():
% type(targetTypish)) % type(targetTypish))
val = self.Value(self) val = self.Value(self)
val.ldata = self.toPointerData(targetAddress) val.ldata = self.toPointerData(targetAddress)
targetType = self.createType(targetTypish).dynamicType(targetAddress) targetType = self.createType(targetTypish)
if self.useDynamicType:
targetType = targetType.dynamicType(targetAddress)
val.type = self.createPointerType(targetType) val.type = self.createPointerType(targetType)
return val return val
@@ -3675,7 +3681,8 @@ class DumperBase():
% type(targetType)) % type(targetType))
val = self.Value(self) val = self.Value(self)
val.ldata = self.toPointerData(targetAddress) val.ldata = self.toPointerData(targetAddress)
targetType = targetType.dynamicType(targetAddress) if self.useDynamicType:
targetType = targetType.dynamicType(targetAddress)
val.type = self.createReferenceType(targetType) val.type = self.createReferenceType(targetType)
return val return val
@@ -3848,7 +3855,8 @@ class DumperBase():
if self.isInt(datish): # Used as address. if self.isInt(datish): # Used as address.
#DumperBase.warn('CREATING %s AT 0x%x' % (val.type.name, datish)) #DumperBase.warn('CREATING %s AT 0x%x' % (val.type.name, datish))
val.laddress = datish val.laddress = datish
val.type = val.type.dynamicType(datish) if self.useDynamicType:
val.type = val.type.dynamicType(datish)
return val return val
if isinstance(datish, bytes): if isinstance(datish, bytes):
#DumperBase.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(datish))) #DumperBase.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(datish)))

View File

@@ -229,10 +229,11 @@ class Dumper(DumperBase):
def fromFrameValue(self, nativeValue): def fromFrameValue(self, nativeValue):
#DumperBase.warn('FROM FRAME VALUE: %s' % nativeValue.address) #DumperBase.warn('FROM FRAME VALUE: %s' % nativeValue.address)
val = nativeValue val = nativeValue
try: if self.useDynamicType:
val = nativeValue.cast(nativeValue.dynamic_type) try:
except: val = nativeValue.cast(nativeValue.dynamic_type)
pass except:
pass
return self.fromNativeValue(val) return self.fromNativeValue(val)
def fromNativeValue(self, nativeValue): def fromNativeValue(self, nativeValue):
@@ -1151,7 +1152,9 @@ class Dumper(DumperBase):
def nativeValueDereferencePointer(self, value): def nativeValueDereferencePointer(self, value):
# This is actually pretty expensive, up to 100ms. # This is actually pretty expensive, up to 100ms.
deref = value.nativeValue.dereference() deref = value.nativeValue.dereference()
return self.fromNativeValue(deref.cast(deref.dynamic_type)) if self.useDynamicType:
deref = deref.cast(deref.dynamic_type)
return self.fromNativeValue(deref)
def nativeValueDereferenceReference(self, value): def nativeValueDereferenceReference(self, value):
nativeValue = value.nativeValue nativeValue = value.nativeValue