summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2010-08-19 14:05:50 +0200
committerhjk <qtc-committer@nokia.com>2010-08-19 14:06:08 +0200
commita3804bbfe3dbc15ba895b2a289163a7613019d8f (patch)
treefd41d33a80ec996e5c197854802ee3f168ae2a50
parentcf8af3272b3d43fdce08458d13b9e78d35946ad4 (diff)
downloadqt-creator-a3804bbfe3dbc15ba895b2a289163a7613019d8f.tar.gz
debugger: fix QObject identification
-rw-r--r--share/qtcreator/gdbmacros/dumper.py31
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)