Debugger: Extract virtual function table dumper

Change-Id: I729186d36200967d6ca229e639ceb864f69240f7
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2017-01-20 09:05:23 +01:00
parent ade1b7505c
commit 10df40ca5e
2 changed files with 35 additions and 10 deletions

View File

@@ -316,6 +316,27 @@ class Dumper(DumperBase):
self.qtVersion = lambda: qtVersion
return qtVersion
def putVtableItem(self, address):
funcName = cdbext.getNameByAddress(address)
if funcName is None:
self.putItem(self.createPointerValue(address, 'void'))
else:
self.putValue(funcName)
self.putType('void*')
self.putAddress(address)
def putVTableChildren(self, item, itemCount):
p = item.address()
for i in xrange(itemCount):
deref = self.extractPointer(p)
if deref == 0:
n = i
break
with SubItem(self, i):
self.putVtableItem(deref)
p += self.ptrSize()
return itemCount
def ptrSize(self):
size = cdbext.pointerSize()
self.ptrSize = lambda: size

View File

@@ -839,6 +839,18 @@ class DumperBase:
def putSymbolValue(self, address):
self.putValue(self.prettySymbolByAddress(address))
def putVTableChildren(self, item, itemCount):
p = item.pointer()
for i in xrange(itemCount):
deref = self.extractPointer(p)
if deref == 0:
itemCount = i
break
with SubItem(self, i):
self.putItem(self.createPointerValue(deref, 'void'))
p += self.ptrSize()
return itemCount
def putFields(self, value, dumpBase = True):
baseIndex = 0
for item in value.members(True):
@@ -850,18 +862,10 @@ class DumperBase:
self.putType(' ')
self.putField('sortgroup', 20)
self.putValue(item.name)
n = 10
n = 100
if self.isExpanded():
with Children(self):
p = item.pointer()
for i in xrange(n):
deref = self.extractPointer(p)
if deref == 0:
n = i
break
with SubItem(self, i):
self.putItem(self.createPointerValue(deref, 'void'))
p += self.ptrSize()
n = self.putVTableChildren(item, n)
self.putNumChild(n)
continue