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()
|
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)))
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user