From 0697fc5e74398efeff3364a67ddf3ad946ece370 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 8 Nov 2011 20:04:51 +0100 Subject: [PATCH] debugger: use faster symbol lookup to discover dynamic type Change-Id: I09d2deedf9288cf930a38179e7ff6e4f8e242efc Reviewed-by: hjk --- share/qtcreator/dumper/dumper.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py index c829f25a78b..7b07865334a 100644 --- a/share/qtcreator/dumper/dumper.py +++ b/share/qtcreator/dumper/dumper.py @@ -1524,22 +1524,15 @@ class Dumper: warn("WRONG ASSUMPTION HERE: %s " % type.code) check(False) - fields = extractFields(type) - #fields = type.fields() - - # The dynamic type is a better type. - if len(fields): - field = fields[0] - #warn("FIELD: %s" % field.name) - if field.name.startswith("_vptr."): - p = value[field.name] - if long(p.dereference()) != 0: - func = str(p.dereference()) - pos1 = func.find('<') - if pos1 != -1: - pos2 = func.find('::~') - if pos2 != -1: - self.putBetterType(func[pos1 + 1 : pos2]) + #vtbl = str(parseAndEvaluate("{int(*)(int)}%s" % long(value.address))) + vtbl = gdb.execute("info symbol {int*}%s" % long(value.address), + to_string = True) + pos1 = vtbl.find("vtable ") + if pos1 != -1: + pos1 += 11 + pos2 = vtbl.find(" +", pos1) + if pos2 != -1: + self.putType(vtbl[pos1 : pos2], 1) if self.useFancy and (format is None or format >= 1): self.putAddress(value.address) @@ -1566,6 +1559,8 @@ class Dumper: #warn("INAME: %s " % self.currentIName) #warn("INAMES: %s " % self.expandedINames) #warn("EXPANDED: %s " % (self.currentIName in self.expandedINames)) + fields = extractFields(type) + #fields = type.fields() self.putType(typeName) self.putAddress(value.address)