diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py
index 77730fcfd7eb793e9c26db59840b15d3083a4931..106d537acf913aa9e15e855b4c288605e6e47717 100644
--- a/share/qtcreator/gdbmacros/dumper.py
+++ b/share/qtcreator/gdbmacros/dumper.py
@@ -1399,7 +1399,14 @@ class Dumper:
 
             # Insufficient, see http://sourceware.org/bugzilla/show_bug.cgi?id=10953
             #fields = value.type.fields()
-            fields = stripTypedefs(value.type).fields()
+
+            # Insufficient, see http://sourceware.org/bugzilla/show_bug.cgi?id=11777
+            #fields = stripTypedefs(value.type).fields()
+
+            # This seems to work.
+            type = stripTypedefs(type)
+            type = lookupType(str(type))
+            fields = type.fields()
 
             self.putType(item.value.type)
             try:
@@ -1436,7 +1443,10 @@ class Dumper:
 
     def putFields(self, item, innerType = None):
             value = item.value
-            fields = stripTypedefs(value.type).fields()
+            type = stripTypedefs(value.type)
+            # http://sourceware.org/bugzilla/show_bug.cgi?id=11777
+            type = lookupType(str(type))
+            fields = stripTypedefs(type).fields()
             baseNumber = 0
             for field in fields:
                 #warn("FIELD: %s" % field)
@@ -1447,9 +1457,9 @@ class Dumper:
                     continue  # A static class member(?).
 
                 if field.name is None:
-                    innerType = value.type.target()
+                    innerType = type.target()
                     p = value.cast(innerType.pointer())
-                    for i in xrange(value.type.sizeof / innerType.sizeof):
+                    for i in xrange(type.sizeof / innerType.sizeof):
                         self.putItem(Item(p.dereference(), item.iname, i, None))
                         p = p + 1
                     continue