summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2010-08-17 16:36:29 +0200
committerhjk <qtc-committer@nokia.com>2010-08-17 16:45:58 +0200
commitaa16f34ec0335e1fd6defa7928224d13aa54f9a2 (patch)
tree6a8d92f43b6feed44115d39a89c9122e952bba1a
parent7aa677c4e5e19ea0f5f6e393a5a8a5a700077b73 (diff)
downloadqt-creator-aa16f34ec0335e1fd6defa7928224d13aa54f9a2.tar.gz
debugger: next attempt at robustly recognizing QObjects
(cherry picked from commit e8eea80c3ffe987d2467fe5009c02802c92c4052)
-rw-r--r--share/qtcreator/gdbmacros/dumper.py40
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)