forked from qt-creator/qt-creator
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:
committed by
Orgad Shaneh
parent
94f9544df5
commit
00e814fdd1
@@ -3201,13 +3201,17 @@ class DumperBase():
|
||||
val.laddress = self.pointer()
|
||||
if val.laddress is None and self.laddress is not None:
|
||||
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:
|
||||
val = self.dumper.nativeValueDereferenceReference(self)
|
||||
elif self.type.code == TypeCode.Pointer:
|
||||
if self.nativeValue is None:
|
||||
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:
|
||||
val = self.dumper.nativeValueDereferencePointer(self)
|
||||
else:
|
||||
@@ -3662,7 +3666,9 @@ class DumperBase():
|
||||
% type(targetTypish))
|
||||
val = self.Value(self)
|
||||
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)
|
||||
return val
|
||||
|
||||
@@ -3675,7 +3681,8 @@ class DumperBase():
|
||||
% type(targetType))
|
||||
val = self.Value(self)
|
||||
val.ldata = self.toPointerData(targetAddress)
|
||||
targetType = targetType.dynamicType(targetAddress)
|
||||
if self.useDynamicType:
|
||||
targetType = targetType.dynamicType(targetAddress)
|
||||
val.type = self.createReferenceType(targetType)
|
||||
return val
|
||||
|
||||
@@ -3848,7 +3855,8 @@ class DumperBase():
|
||||
if self.isInt(datish): # Used as address.
|
||||
#DumperBase.warn('CREATING %s AT 0x%x' % (val.type.name, datish))
|
||||
val.laddress = datish
|
||||
val.type = val.type.dynamicType(datish)
|
||||
if self.useDynamicType:
|
||||
val.type = val.type.dynamicType(datish)
|
||||
return val
|
||||
if isinstance(datish, bytes):
|
||||
#DumperBase.warn('CREATING %s WITH DATA %s' % (val.type.name, self.hexencode(datish)))
|
||||
|
@@ -229,10 +229,11 @@ class Dumper(DumperBase):
|
||||
def fromFrameValue(self, nativeValue):
|
||||
#DumperBase.warn('FROM FRAME VALUE: %s' % nativeValue.address)
|
||||
val = nativeValue
|
||||
try:
|
||||
val = nativeValue.cast(nativeValue.dynamic_type)
|
||||
except:
|
||||
pass
|
||||
if self.useDynamicType:
|
||||
try:
|
||||
val = nativeValue.cast(nativeValue.dynamic_type)
|
||||
except:
|
||||
pass
|
||||
return self.fromNativeValue(val)
|
||||
|
||||
def fromNativeValue(self, nativeValue):
|
||||
@@ -1151,7 +1152,9 @@ class Dumper(DumperBase):
|
||||
def nativeValueDereferencePointer(self, value):
|
||||
# This is actually pretty expensive, up to 100ms.
|
||||
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):
|
||||
nativeValue = value.nativeValue
|
||||
|
Reference in New Issue
Block a user