From bf9a3b2020b033e8dc303fcb2b810d3b0051db25 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 26 Nov 2014 18:10:14 +0100 Subject: Debugger: Fix LLDB reference display for LLDB 320.x There is seemingly still no proper API for that, and the old hack broke. Use a new one. Change-Id: I9e638ca1fbd84c43c7d31b65e017792d1b6a1e0b Reviewed-by: Christian Stenger --- share/qtcreator/debugger/lldbbridge.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'share') diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 933c89b544..6a381f9f81 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -920,7 +920,6 @@ class Dumper(DumperBase): return False def putItem(self, value, tryDynamic=True): - #value = value.GetDynamicValue(lldb.eDynamicCanRunTarget) typeName = value.GetType().GetUnqualifiedType().GetName() if self.isGoodLldb: value.SetPreferDynamicValue(tryDynamic) @@ -965,10 +964,11 @@ class Dumper(DumperBase): realType = value.GetType() if hasattr(realType, 'GetCanonicalType'): baseType = realType.GetCanonicalType() - baseValue = value.Cast(baseType.unqualified()) - self.putItem(baseValue) - self.putBetterType(realType) - return + if baseType != realType: + baseValue = value.Cast(baseType.unqualified()) + self.putItem(baseValue) + self.putBetterType(realType) + return # Our turf now. if self.isGoodLldb: @@ -986,11 +986,24 @@ class Dumper(DumperBase): # References if value.GetType().IsReferenceType(): - origType = value.GetTypeName(); type = value.GetType().GetDereferencedType().unqualified() - addr = value.GetLoadAddress() - self.putItem(value.CreateValueFromAddress(None, addr, type)) - self.putBetterType(origType) + addr = value.GetValueAsUnsigned() + #warn("FROM: %s" % value) + #warn("ADDR: 0x%x" % addr) + #warn("TYPE: %s" % type) + # Works: + #item = self.currentThread().GetSelectedFrame().EvaluateExpression( + # "(%s*)0x%x" % (type, addr)).Dereference() + # Works: + item = value.CreateValueFromExpression(None, + "(%s*)0x%x" % (type, addr), lldb.SBExpressionOptions()).Dereference() + # Does not work: + #item = value.CreateValueFromAddress(None, addr, type) + # Does not work: + #item = value.Cast(type.GetPointerType()).Dereference() + #warn("TOOO: %s" % item) + self.putItem(item) + self.putBetterType(value.GetTypeName()) return # Pointers @@ -1534,7 +1547,6 @@ class Dumper(DumperBase): def selectThread(self, args): self.process.SetSelectedThreadByID(args['id']) self.reportData() - self.reportStack() def requestModuleSymbols(self, frame): self.handleCommand("target module list " + frame) -- cgit v1.2.1