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"