diff options
author | hjk <qtc-committer@nokia.com> | 2010-08-19 14:05:50 +0200 |
---|---|---|
committer | hjk <qtc-committer@nokia.com> | 2010-08-19 14:06:08 +0200 |
commit | a3804bbfe3dbc15ba895b2a289163a7613019d8f (patch) | |
tree | fd41d33a80ec996e5c197854802ee3f168ae2a50 | |
parent | cf8af3272b3d43fdce08458d13b9e78d35946ad4 (diff) | |
download | qt-creator-a3804bbfe3dbc15ba895b2a289163a7613019d8f.tar.gz |
debugger: fix QObject identification
-rw-r--r-- | share/qtcreator/gdbmacros/dumper.py | 31 |
1 files 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) |