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 <christian.stenger@qt.io>
This commit is contained in:
hjk
2017-04-24 16:42:30 +02:00
parent b952d0420e
commit 5784a96596

View File

@@ -1304,6 +1304,17 @@ class DumperBase:
self.putFormattedPointerX(value) self.putFormattedPointerX(value)
self.ping('formattedPointer') 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): def putFormattedPointerX(self, value):
#warn("PUT FORMATTED: %s" % value) #warn("PUT FORMATTED: %s" % value)
pointer = value.pointer() pointer = value.pointer()
@@ -1328,6 +1339,10 @@ class DumperBase:
self.putNumChild(0) self.putNumChild(0)
return return
if self.currentIName.endswith('.this'):
self.putDerefedPointer(value)
return
displayFormat = self.currentItemFormat(value.type.name) displayFormat = self.currentItemFormat(value.type.name)
innerType = value.type.target() #.unqualified() innerType = value.type.target() #.unqualified()
@@ -1375,18 +1390,10 @@ class DumperBase:
#warn('AUTODEREF: %s' % self.autoDerefPointers) #warn('AUTODEREF: %s' % self.autoDerefPointers)
#warn('INAME: %s' % self.currentIName) #warn('INAME: %s' % self.currentIName)
#warn('INNER: %s' % innerType.name) #warn('INNER: %s' % innerType.name)
if self.autoDerefPointers or self.currentIName.endswith('.this'): if self.autoDerefPointers:
derefValue = value.dereference() # Generic pointer type with AutomaticFormat, but never dereference char types:
# Never dereference char types.
if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'): if innerType.name not in ('char', 'signed char', 'unsigned char', 'wchar_t'):
# Generic pointer type with AutomaticFormat. self.putDerefedPointer(value)
self.putType(innerType)
savedCurrentChildType = self.currentChildType
self.currentChildType = innerType.name
derefValue.name = '*'
self.putItem(derefValue)
self.currentChildType = savedCurrentChildType
self.putOriginalAddress(pointer)
return return
#warn('GENERIC PLAIN POINTER: %s' % value.type) #warn('GENERIC PLAIN POINTER: %s' % value.type)