diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 7fc18e69ab47721b0fbe4079c7edaf9bf6442912..2aeaadbd9b96f35f6769b17a199951a413e5047c 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -772,7 +772,8 @@ class DumperBase:
                 self.putItem(value.dereference())
                 self.currentChildType = savedCurrentChildType
                 #self.putPointerValue(value)
-                self.put('origaddr="0x%x",' % value.address)
+                if value.address is not None:
+                    self.put('origaddr="0x%x",' % value.address)
                 return True
 
         #warn("GENERIC PLAIN POINTER: %s" % value.type)
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index c9938db70e54b42bfe36dcf3046e0d277a0b3bbe..26de4dde467c5dffcbc697e06562a393c06fec56 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -183,20 +183,24 @@ def impl_SBValue__getitem__(value, index):
             address = address & 0xFFFFFFFFFFFFFFFF  # Force unsigned
             return value.CreateValueFromAddress(None, address, innertype)
         return value.GetChildAtIndex(index)
-    return value.GetChildMemberWithName(index)
+    result = value.GetChildMemberWithName(index)
+    if int(result.GetLoadAddress()) == 0xffffffffffffffff:
+        options = lldb.SBExpressionOptions()
+        typeClass = child.GetType().GetTypeClass()
+        if typeClass != lldb.eTypeClassBuiltin:
+            i = value.GetIndexOfChildWithName(index)
+            field = value.GetType().GetFieldAtIndex(i)
+            addr = value.GetLoadAddress() + field.GetOffsetInBytes()
+            child = value.CreateValueFromAddress(child.GetName(), addr, child.GetType())
+    return result
 
 def impl_SBValue__deref(value):
     result = value.Dereference()
     if result.IsValid():
         return result
-    #warn("EXPR: %s" % '*' + value.get_expr_path())
-    #warn("TARGET: %s" % value.GetTarget())
-    #result = value.CreateValueFromExpression('$', '*' + value.get_expr_path())
-    options = lldb.SBExpressionOptions()
-    result = value.GetTarget().EvaluateExpression('*' + value.get_expr_path(), options)
-    #warn("RESULT.NAME: %s" % result.GetName())
-    #warn("RESULT.TYPE: %s" % result.GetType())
-    #warn("RESULT.LOADADDRESS: %s" % result.GetLoadAddress())
+    #warn("RESULT.LOADADDRESS A: 0x%x" % result.GetLoadAddress())
+    result = value.CreateValueFromAddress(None, value.GetValueAsUnsigned(), value.GetType().GetPointerType())
+    #warn("RESULT.LOADADDRESS B: 0x%x" % result.GetLoadAddress())
     return result
 
 lldb.SBValue.__add__ = impl_SBValue__add__
@@ -290,7 +294,6 @@ class Dumper(DumperBase):
         self.useFancy = True
         self.formats = {}
         self.typeformats = {}
-        self.currentAddress = None
 
         self.currentIName = None
         self.currentValuePriority = -100
@@ -339,7 +342,6 @@ class Dumper(DumperBase):
                 item.name = '*'
             self.put('name="%s",' % item.name)
         item.savedIName = self.currentIName
-        item.savedCurrentAddress = self.currentAddress
         item.savedValue = self.currentValue
         item.savedValuePriority = self.currentValuePriority
         item.savedValueEncoding = self.currentValueEncoding
@@ -369,8 +371,6 @@ class Dumper(DumperBase):
                 self.put('value="%s",' % self.currentValue)
         except:
             pass
-        if not self.currentAddress is None:
-            self.put(self.currentAddress)
         self.put('},')
         self.currentIName = item.savedIName
         self.currentValue = item.savedValue
@@ -378,7 +378,6 @@ class Dumper(DumperBase):
         self.currentValueEncoding = item.savedValueEncoding
         self.currentType = item.savedType
         self.currentTypePriority = item.savedTypePriority
-        self.currentAddress = item.savedCurrentAddress
         return True
 
     def isSimpleType(self, typeobj):
@@ -609,9 +608,6 @@ class Dumper(DumperBase):
                 for i in self.childRange():
                     self.putSubItem(i, (base + i).dereference())
 
-    def parseAndEvalute(self, expr):
-        return expr
-
     def createPointerValue(self, address, pointeeType):
         addr = int(address) & 0xFFFFFFFFFFFFFFFF
         return self.context.CreateValueFromAddress(None, addr, pointeeType).AddressOf()
@@ -890,11 +886,10 @@ class Dumper(DumperBase):
             self.putItem(value, tryDynamic)
 
     def putAddress(self, addr):
-        if self.currentPrintsAddress:
-            try:
-                self.currentAddress = 'addr="0x%s",' % int(addr)
-            except:
-                pass
+        #if int(addr) == 0xffffffffffffffff:
+        #    raise RuntimeError("Illegal address")
+        if self.currentPrintsAddress and not addr is None:
+            self.put('addr="0x%x",' % int(addr))
 
     def isFunctionType(self, type):
         return type.IsFunctionType()
@@ -906,10 +901,10 @@ class Dumper(DumperBase):
         typeClass = value.GetType().GetTypeClass()
 
         if tryDynamic:
-            self.putAddress(value.address)
+            self.putAddress(value.GetLoadAddress())
 
         # Handle build-in LLDB visualizers if wanted.
-        if self.useLldbDumpers and value.GetTypeSynthetic().IsValid():
+        if False and self.useLldbDumpers and value.GetTypeSynthetic().IsValid():
             # FIXME: print "official" summary?
             summary = value.GetTypeSummary()
             if summary.IsValid():
@@ -967,7 +962,6 @@ class Dumper(DumperBase):
             type = value.GetType().GetDereferencedType().unqualified()
             addr = int(value) & 0xFFFFFFFFFFFFFFFF
             self.putItem(value.CreateValueFromAddress(None, addr, type))
-            #self.putItem(value.CreateValueFromData(None, value.GetData(), type))
             self.putBetterType(origType)
             return
 
@@ -1007,11 +1001,14 @@ class Dumper(DumperBase):
                 self.putEmptyValue()
 
         self.put('numchild="%s",' % numchild)
-        self.put('addr="0x%x",' % value.GetLoadAddress())
+
         if self.currentIName in self.expandedINames:
             with Children(self):
                 self.putFields(value)
 
+    def warn(self, msg):
+        self.put('{name="%s",value="",type=""},' % msg)
+
     def putFields(self, value):
         # Suppress printing of 'name' field for arrays.
         if value.GetType().GetTypeClass() == lldb.eTypeClassArray:
@@ -1023,12 +1020,6 @@ class Dumper(DumperBase):
 
         n = value.GetNumChildren()
         m = value.GetType().GetNumberOfDirectBaseClasses()
-        #warn("FIELDS: %s %s" % (n, m))
-        #warn("VALUE.NAME: %s" % value.GetName())
-        #warn("VALUE.TYPE: %s" % value.GetType())
-        #warn("VALUE.ADDRESS: 0x%x" % value.GetLoadAddress())
-        #warn("VALUE.LOADADDRESS: 0x%x" % value.GetLoadAddress())
-        #warn("VALUE: %s" % value)
         if n > 10000:
             n = 10000
         # seems to happen in the 'inheritance' autotest
@@ -1043,26 +1034,12 @@ class Dumper(DumperBase):
         for i in xrange(m, n):
         #for i in range(n):
             child = value.GetChildAtIndex(i)
-            #warn("CHILD.NAME: %s" % child.GetName())
-            #warn("CHILD.TYPE: %s" % child.GetType())
-            #warn("CHILD.FIELD: %s" % field)
-            #warn("CHILD.FIELD.NAME: %s" % field.GetName())
-            #warn("CHILD.FIELD.OFFSET: %s" % field.GetOffsetInBytes())
-            #warn("CHILD.ADDRESS: 0x%x" % child.GetAddress())
-            #warn("CHILD.ISVALID: 0x%x" % child.IsValid())
-            #warn("CHILD.LOADADDRESS: %x" % child.GetLoadAddress())
             if int(child.GetLoadAddress()) == 0xffffffffffffffff:
                 typeClass = child.GetType().GetTypeClass()
                 if typeClass != lldb.eTypeClassBuiltin:
-                    #warn("EEEE")
                     field = value.GetType().GetFieldAtIndex(i)
                     addr = value.GetLoadAddress() + field.GetOffsetInBytes()
-                    child = self.context.CreateValueFromAddress(child.GetName(), addr, child.GetType())
-                    #child = self.createValue(value.GetLoadAddress() + field.GetOffsetInBytes(), child.GetType())
-                    #warn("CHILD X.ADDRESS: 0x%x" % child.GetAddress())
-                    #warn("CHILD X.ISVALID: 0x%x" % child.IsValid())
-                    #warn("CHILD X.LOADADDRESS: %x" % child.GetLoadAddress())
-            #warn("CHILD: %s" % child)
+                    child = value.CreateValueFromAddress(child.GetName(), addr, child.GetType())
             if child.IsValid():  # FIXME: Anon members?
                 with SubItem(self, child):
                     self.putItem(child)
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 8152f910f332bffed15e61391eb6e49454ff31c0..5e6b96b1283e61e624495bb62d1cb31729980025 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -1397,7 +1397,7 @@ def qdump__QObject(d, value):
 
         # Slots.
         with SubItem(d, "slots"):
-            slotCount = metaData[4] - signalCount
+            slotCount = int(metaData[4]) - signalCount
             d.putItemCount(slotCount)
             d.putNoType()
             d.putNumChild(slotCount)