forked from qt-creator/qt-creator
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:
@@ -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)
|
||||||
|
Reference in New Issue
Block a user