diff options
author | hjk <qtc-committer@nokia.com> | 2010-08-17 16:36:29 +0200 |
---|---|---|
committer | hjk <qtc-committer@nokia.com> | 2010-08-17 16:45:58 +0200 |
commit | aa16f34ec0335e1fd6defa7928224d13aa54f9a2 (patch) | |
tree | 6a8d92f43b6feed44115d39a89c9122e952bba1a | |
parent | 7aa677c4e5e19ea0f5f6e393a5a8a5a700077b73 (diff) | |
download | qt-creator-aa16f34ec0335e1fd6defa7928224d13aa54f9a2.tar.gz |
debugger: next attempt at robustly recognizing QObjects
(cherry picked from commit e8eea80c3ffe987d2467fe5009c02802c92c4052)
-rw-r--r-- | share/qtcreator/gdbmacros/dumper.py | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index e6b9783417..8691296879 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -843,7 +843,6 @@ class Item: # This is a mapping from 'type name' to 'display alternatives'. -qqDumpers = {} qqFormats = {} @@ -858,7 +857,6 @@ class SetupCommand(gdb.Command): for key, value in module.__dict__.items(): if key.startswith("qdump__"): name = key[7:] - qqDumpers[name] = value qqFormats[name] = qqFormats.get(name, ""); elif key.startswith("qform__"): name = key[7:] @@ -1330,27 +1328,41 @@ class Dumper: value = item.value type = value.type - typedefStrippedType = stripTypedefs(type); - nsStrippedType = self.stripNamespaceFromType( - typedefStrippedType).replace("::", "__") + typedefStrippedType = stripTypedefs(type) + + if isSimpleType(typedefStrippedType): + #warn("IS SIMPLE: %s " % type) + self.putType(item.value.type) + self.putValue(value) + self.putNumChild(0) + return # Is this derived from QObject? hasMetaObject = False + for field in typedefStrippedType.strip_typedefs().fields(): + if field.name == "staticMetaObject": + hasMetaObject = True + break + + nsStrippedType = self.stripNamespaceFromType(typedefStrippedType)\ + .replace("::", "__") #warn(" STRIPPED: %s" % nsStrippedType) - #warn(" DUMPERS: %s" % self.dumpers) #warn(" DUMPERS: %s" % (nsStrippedType in self.dumpers)) - if isSimpleType(typedefStrippedType): - #warn("IS SIMPLE: %s " % type) - self.putType(item.value.type) - self.putValue(value) - self.putNumChild(0) + format = self.itemFormat(item) - elif nsStrippedType in self.dumpers: + if self.useFancy \ + and ((format is None) or (format >= 1)) \ + and ((nsStrippedType in self.dumpers) or hasMetaObject): #warn("IS DUMPABLE: %s " % type) self.putType(item.value.type) - self.dumpers[nsStrippedType](self, item) + if hasMetaObject: + # value has references stripped off item.value. + item1 = Item(value, item.iname) + qdump__QObject(self, item1) + else: + self.dumpers[nsStrippedType](self, item) #warn(" RESULT: %s " % self.output) elif typedefStrippedType.code == gdb.TYPE_CODE_ENUM: @@ -1363,8 +1375,6 @@ class Dumper: elif typedefStrippedType.code == gdb.TYPE_CODE_PTR: isHandled = False - format = self.itemFormat(item) - if not format is None: self.putAddress(value.address) self.putType(item.value.type) |