aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2017-08-15 15:17:12 +0200
committerhjk <hjk@qt.io>2017-08-21 10:35:06 +0000
commit8cb944f4ffd3427f200be3068c875481eded9de4 (patch)
tree230800ce16ea7d6324589efea951b8a78d0d2b52 /share
parentaf73f6e5723a4b9de1d1e55bdbb62188d35385ff (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.py11
-rw-r--r--share/qtcreator/debugger/lldbbridge.py20
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