diff options
author | hjk <hjk@qt.io> | 2017-08-15 15:17:12 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2017-08-21 10:35:06 +0000 |
commit | 8cb944f4ffd3427f200be3068c875481eded9de4 (patch) | |
tree | 230800ce16ea7d6324589efea951b8a78d0d2b52 /share | |
parent | af73f6e5723a4b9de1d1e55bdbb62188d35385ff (diff) |
Debugger: Display summaries for CoreFoundation types
Uses lldb's GetSummary() method to display values for CoreFoundation
string-like variables.
Task-number: QTCREATORBUG-18638
Change-Id: Icca6d9cf7b328c80b44eebe597259f38aba1c3ef
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'share')
-rw-r--r-- | share/qtcreator/debugger/dumper.py | 11 | ||||
-rw-r--r-- | share/qtcreator/debugger/lldbbridge.py | 20 |
2 files changed, 30 insertions, 1 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 1a332ab3e1..e415bc1deb 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -2714,6 +2714,8 @@ class DumperBase: if typeobj.code == TypeCodePointer: self.putFormattedPointer(value) + if value.summary and self.useFancy: + self.putValue(self.hexencode(value.summary), 'utf8:1:0') return self.putAddress(value.address()) @@ -2797,6 +2799,12 @@ class DumperBase: #warn('INAMES: %s ' % self.expandedINames) #warn('EXPANDED: %s ' % (self.currentIName in self.expandedINames)) self.putType(typeName) + + if value.summary is not None and self.useFancy: + self.putValue(self.hexencode(value.summary), 'utf8:1:0') + self.putNumChild(0) + return + self.putNumChild(1) self.putEmptyValue() #warn('STRUCT GUTS: %s ADDRESS: 0x%x ' % (value.name, value.address())) @@ -2858,6 +2866,7 @@ class DumperBase: self.laddress = None # Own address. self.lIsInScope = True self.ldisplay = None + self.summary = None # Always hexencoded UTF-8. self.lbitpos = None self.lbitsize = None self.targetValue = None # For references. @@ -2873,6 +2882,7 @@ class DumperBase: val.laddress = self.laddress val.lIsInScope = self.lIsInScope val.ldisplay = self.ldisplay + val.summary = self.summary val.lbitpos = self.lbitpos val.lbitsize = self.lbitsize val.targetValue = self.targetValue @@ -3190,6 +3200,7 @@ class DumperBase: return self.detypedef().dereference() val = self.dumper.Value(self.dumper) if self.type.code == TypeCodeReference: + val.summary = self.summary if self.nativeValue is None: val.laddress = self.pointer() if val.laddress is None and self.laddress is not None: diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 9c85907f9a..be1678de45 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -125,10 +125,27 @@ class Dumper(DumperBase): def fromNativeValue(self, nativeValue): self.check(isinstance(nativeValue, lldb.SBValue)) - nativeValue.SetPreferSyntheticValue(False) nativeType = nativeValue.GetType() + typeName = nativeType.GetName() code = nativeType.GetTypeClass() + # Display the result of GetSummary() for Core Foundation string + # and string-like types. + summary = None + if self.useFancy: + if (typeName.startswith('CF') + or typeName.startswith('__CF') + or typeName.startswith('NS') + or typeName.startswith('__NSCF')): + if code == lldb.eTypeClassPointer: + summary = nativeValue.Dereference().GetSummary() + elif code == lldb.eTypeClassReference: + summary = nativeValue.Dereference().GetSummary() + else: + summary = nativeValue.GetSummary() + + nativeValue.SetPreferSyntheticValue(False) + if code == lldb.eTypeClassReference: nativeTargetType = nativeType.GetDereferencedType() if not nativeTargetType.IsPointerType(): @@ -196,6 +213,7 @@ class Dumper(DumperBase): #elif code == lldb.eTypeClassVector: # val.type.ltarget = self.fromNativeType(nativeType.GetVectorElementType()) + val.summary = summary val.lIsInScope = nativeValue.IsInScope() val.name = nativeValue.GetName() return val |