diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 5824df84582b66c2cdae99d0391b7d38e9809606..6dd3ab1b6e532c5a69d3437556e5ac0590de1f3e 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -862,10 +862,12 @@ class Dumper(DumperBase): buf[i] = data.GetUnsignedInt8(error, i) return Blob(bytes(buf)) - def isQObject(self, value): - needle = value.GetType().GetName() + "::staticMetaObject" - value = self.target.FindFirstGlobalVariable(needle) - return value.IsValid() + def extractStaticMetaObject(self, typeobj): + if typeobj.GetTypeClass() not in (lldb.eTypeClassStruct, lldb.eTypeClassClass): + return 0 + needle = typeobj.GetUnqualifiedType().GetName() + "::staticMetaObject" + result = self.target.FindFirstGlobalVariable(needle) + return result if result else 0 def stripNamespaceFromType(self, typeName): #type = stripClassTag(typeName) @@ -993,31 +995,23 @@ class Dumper(DumperBase): #numchild = 1 if value.MightHaveChildren() else 0 numchild = value.GetNumChildren() self.putType(typeName) - isQObject = False - if typeClass == lldb.eTypeClassStruct or typeClass == lldb.eTypeClassClass: - if self.isQObject(value): - isQObject = True - self.context = value - if not self.putQObjectNameValue(value): # Is this too expensive? - self.putEmptyValue() - else: - self.putEmptyValue() + self.putEmptyValue(-1) + staticMetaObject = self.extractStaticMetaObject(value.GetType()) + if staticMetaObject: + self.context = value + self.putQObjectNameValue(value) else: v = value.GetValue() if v: self.putValue(v) - else: - self.putEmptyValue() self.put('numchild="%s",' % numchild) if self.currentIName in self.expandedINames: with Children(self): self.putFields(value) - if isQObject: - needle = value.GetType().GetName() + "::staticMetaObject" - smo = self.target.FindFirstGlobalVariable(needle) - self.putQObjectGuts(value, smo) + if staticMetaObject: + self.putQObjectGuts(value, staticMetaObject) def warn(self, msg): self.put('{name="%s",value="",type=""},' % msg) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 9b8107e2e2a8f77daef98af67379052a4cbfd380..0927a360487832f02e4730dbbe9c88492ee36d20 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -2191,10 +2191,14 @@ void tst_Dumpers::dumper_data() "QObject::connect(&child, SIGNAL(destroyed()), &parent, SLOT(deleteLater()));\n" "QObject::disconnect(&child, SIGNAL(destroyed()), &parent, SLOT(deleteLater()));\n" "child.setObjectName(\"A renamed Child\");\n") + % CoreProfile() + % UseDebugImage() // FIXME: Avoid the need. + % Check("child", "\"A renamed Child\"", "@QObject") % Check("parent", "\"A Parent\"", "@QObject"); + QTest::newRow("QObject2") << Data("#include <QWidget>\n" "#include <QApplication>\n"