diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2020-06-29 09:34:57 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2020-07-03 09:07:46 +0000 |
commit | 00e814fdd18dadbea5942d002914b99fb07c4048 (patch) | |
tree | 379f0945fbd31d27e7a09cf5e3e8c4559bb3bc30 /share | |
parent | 94f9544df5138105271ac34415b7abd1fdc58919 (diff) |
Debugger: Respect "Use Dynamic Object Type for Display"
Broke in 5efa84830bb41bfc11db9295df3ad34f5b9bd9f5.
Task-number: QTCREATORBUG-24280
Change-Id: Ice4b9d826d2402efb354180886d35926a2513e5a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'share')
-rw-r--r-- | share/qtcreator/debugger/dumper.py | 18 | ||||
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 13 |
2 files changed, 21 insertions, 10 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 5e211885ce5..e66900c1ef6 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -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))) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index ae20b57ada8..c81bca1dd50 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -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 |