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