From 5784a96596a95aaa43173f58b71c0d3c6a0138e6 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 24 Apr 2017 16:42:30 +0200 Subject: [PATCH] Debugger: Extract printing of dereferenced pointers into method It's used twice, always for 'this', and whenever asked for by the user's 'Dereference Pointers Automatically' choice, but needs to be done at different times. Change-Id: I4dc7340d0a4cb3eb0c7ff17d59e39be0e3870aa0 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index d94ffbe640c..c03f07d9e97 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1304,6 +1304,17 @@ class DumperBase: self.putFormattedPointerX(value) self.ping('formattedPointer') + def putDerefedPointer(self, value): + derefValue = value.dereference() + innerType = value.type.target() #.unqualified() + self.putType(innerType) + savedCurrentChildType = self.currentChildType + self.currentChildType = innerType.name + derefValue.name = '*' + self.putItem(derefValue) + self.currentChildType = savedCurrentChildType + self.putOriginalAddress(value.pointer()) + def putFormattedPointerX(self, value): #warn("PUT FORMATTED: %s" % value) pointer = value.pointer() @@ -1328,6 +1339,10 @@ class DumperBase: self.putNumChild(0) return + if self.currentIName.endswith('.this'): + self.putDerefedPointer(value) + return + displayFormat = self.currentItemFormat(value.type.name) innerType = value.type.target() #.unqualified() @@ -1375,18 +1390,10 @@ class DumperBase: #warn('AUTODEREF: %s' % self.autoDerefPointers) #warn('INAME: %s' % self.currentIName) #warn('INNER: %s' % innerType.name) - if self.autoDerefPointers or self.currentIName.endswith('.this'): - derefValue = value.dereference() - # Never dereference char types. + if self.autoDerefPointers: + # Generic pointer type with AutomaticFormat, but never dereference char types: if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'): - # Generic pointer type with AutomaticFormat. - self.putType(innerType) - savedCurrentChildType = self.currentChildType - self.currentChildType = innerType.name - derefValue.name = '*' - self.putItem(derefValue) - self.currentChildType = savedCurrentChildType - self.putOriginalAddress(pointer) + self.putDerefedPointer(value) return #warn('GENERIC PLAIN POINTER: %s' % value.type)