From a3804bbfe3dbc15ba895b2a289163a7613019d8f Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 19 Aug 2010 14:05:50 +0200 Subject: debugger: fix QObject identification --- share/qtcreator/gdbmacros/dumper.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index c4151d93ed..11a7ced047 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -1141,6 +1141,8 @@ SalCommand() ####################################################################### +qqQObjectCache = {} + class Dumper: def __init__(self): self.output = "" @@ -1154,6 +1156,25 @@ class Dumper: self.currentType = None self.currentTypePriority = -100 + def checkForQObjectBase(self, type): + if type.code != gdb.TYPE_CODE_STRUCT: + return False + name = str(type) + if name in qqQObjectCache: + return qqQObjectCache[name] + if name == self.ns + "QObject": + qqQObjectCache[name] = True + return True + fields = type.strip_typedefs().fields() + if len(fields) == 0: + qqQObjectCache[name] = False + return False + base = fields[0].type.strip_typedefs() + result = self.checkForQObjectBase(base) + qqQObjectCache[name] = result + return result + + def put(self, value): self.output += value @@ -1338,11 +1359,7 @@ class Dumper: return # Is this derived from QObject? - hasMetaObject = False - for field in typedefStrippedType.strip_typedefs().fields(): - if field.name == "staticMetaObject": - hasMetaObject = True - break + isQObjectDerived = self.checkForQObjectBase(typedefStrippedType) nsStrippedType = self.stripNamespaceFromType(typedefStrippedType)\ .replace("::", "__") @@ -1354,10 +1371,10 @@ class Dumper: if self.useFancy \ and ((format is None) or (format >= 1)) \ - and ((nsStrippedType in self.dumpers) or hasMetaObject): + and ((nsStrippedType in self.dumpers) or isQObjectDerived): #warn("IS DUMPABLE: %s " % type) self.putType(item.value.type) - if hasMetaObject: + if isQObjectDerived: # value has references stripped off item.value. item1 = Item(value, item.iname) qdump__QObject(self, item1) -- cgit v1.2.1