From 5d645bfdfe87b22315997847191ac7d45b243e99 Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Fri, 13 Aug 2010 09:27:22 +0200 Subject: [PATCH] debugger: fix display of QObject properties --- share/qtcreator/gdbmacros/dumper.py | 14 ++++++++++++-- share/qtcreator/gdbmacros/gdbmacros.py | 9 +++------ tests/manual/gdbdebugger/simple/app.cpp | 19 +++++++++++++------ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index 0a375b55d97..73cbf78af8d 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -1357,6 +1357,13 @@ class Dumper: nsStrippedType = self.stripNamespaceFromType(typedefStrippedType)\ .replace("::", "__") + # Is this derived from QObject? + try: + item.value['staticMetaObject'] + hasMetaObject = True + except: + hasMetaObject = False + #warn(" STRIPPED: %s" % nsStrippedType) #warn(" DUMPERS: %s" % (nsStrippedType in qqDumpers)) @@ -1369,11 +1376,14 @@ class Dumper: elif self.useFancy \ and ((format is None) or (format >= 1)) \ - and (nsStrippedType in qqDumpers): + and ((nsStrippedType in qqDumpers) or hasMetaObject): #warn("IS DUMPABLE: %s " % type) #self.putAddress(value.address) self.putType(item.value.type) - qqDumpers[nsStrippedType](self, item) + if hasMetaObject: + qdump__QObject(self, item) + else: + qqDumpers[nsStrippedType](self, item) #warn(" RESULT: %s " % self.output) elif typedefStrippedType.code == gdb.TYPE_CODE_ENUM: diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py index 14596df593a..8fa5079ceac 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.py +++ b/share/qtcreator/gdbmacros/gdbmacros.py @@ -588,9 +588,6 @@ def extractCString(table, offset): return result -def qdump__QWidget(d, item): - qdump__QObject(d, item) - def qdump__QObject(d, item): #warn("OBJECT: %s " % item.value) staticMetaObject = item.value["staticMetaObject"] @@ -628,6 +625,7 @@ def qdump__QObject(d, item): d.putNumChild(4) if d.isExpanded(item): with Children(d): + d.putFields(item) # Parent and children. d.putItem(Item(d_ptr["parent"], item.iname, "parent", "parent")) d.putItem(Item(d_ptr["children"], item.iname, "children", "children")) @@ -651,9 +649,8 @@ def qdump__QObject(d, item): namesArray = names["d"]["array"] dynamicPropertyCount = namesEnd - namesBegin - #staticPropertyCount = metaData[6] - # FIXME: Replace with plain memory accesses. - staticPropertyCount = call(mo, "propertyCount()") + #staticPropertyCount = call(mo, "propertyCount()") + staticPropertyCount = metaData[6] #warn("PROPERTY COUNT: %s" % staticPropertyCount) propertyCount = staticPropertyCount + dynamicPropertyCount diff --git a/tests/manual/gdbdebugger/simple/app.cpp b/tests/manual/gdbdebugger/simple/app.cpp index 1b43bb9eba4..bc99c1d5f61 100644 --- a/tests/manual/gdbdebugger/simple/app.cpp +++ b/tests/manual/gdbdebugger/simple/app.cpp @@ -761,13 +761,18 @@ public: int i = 0; } - Q_PROPERTY(QString myProp READ myProp WRITE setMyProp) - QString myProp() const { return m_myProp; } - Q_SLOT void setMyProp(const QString &mt) { m_myProp = mt; } + Q_PROPERTY(QString myProp1 READ myProp1 WRITE setMyProp1) + QString myProp1() const { return m_myProp1; } + Q_SLOT void setMyProp1(const QString &mt) { m_myProp1 = mt; } + + Q_PROPERTY(QString myProp2 READ myProp2 WRITE setMyProp2) + QString myProp2() const { return m_myProp2; } + Q_SLOT void setMyProp2(const QString &mt) { m_myProp2 = mt; } public: Ui *m_ui; - QString m_myProp; + QString m_myProp1; + QString m_myProp2; }; } // namespace Bar @@ -778,8 +783,10 @@ void testQObject(int &argc, char *argv[]) QApplication app(argc, argv); #if 1 Names::Bar::TestObject test; - test.setMyProp("HELLO"); - QString s = test.myProp(); + test.setMyProp1("HELLO"); + test.setMyProp2("WORLD"); + QString s = test.myProp1(); + s += test.myProp2(); int i = 1; #endif -- GitLab