summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2017-05-15 16:54:07 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2017-05-18 09:33:54 +0000
commit4eac9533e11c0abef588ed0f7193495d1c41873c (patch)
treef08920e50b98be312988685396faf8cc679c48fd /share
parentee722a047cfd4bee213343087519a0380f5227e8 (diff)
downloadqt-creator-4eac9533e11c0abef588ed0f7193495d1c41873c.tar.gz
Make sure lldbbridge.fromNativeValue always sets value name
Change-Id: I40296843bcbc504d6271a1f30ac4f8c4a1a2fe85 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/debugger/lldbbridge.py98
1 files changed, 44 insertions, 54 deletions
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index ba75e0d576..8287d5e8f9 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -117,6 +117,7 @@ class Dumper(DumperBase):
nativeValue.SetPreferSyntheticValue(False)
nativeType = nativeValue.GetType()
code = nativeType.GetTypeClass()
+
if code == lldb.eTypeClassReference:
nativeTargetType = nativeType.GetDereferencedType()
if not nativeTargetType.IsPointerType():
@@ -125,8 +126,7 @@ class Dumper(DumperBase):
val = self.createReferenceValue(nativeValue.GetValueAsUnsigned(), targetType)
val.laddress = nativeValue.AddressOf().GetValueAsUnsigned()
#warn('CREATED REF: %s' % val)
- return val
- if code == lldb.eTypeClassPointer:
+ elif code == lldb.eTypeClassPointer:
nativeTargetType = nativeType.GetPointeeType()
if not nativeTargetType.IsPointerType():
nativeTargetType = nativeTargetType.GetUnqualifiedType()
@@ -135,66 +135,57 @@ class Dumper(DumperBase):
#warn('CREATED PTR 1: %s' % val)
val.laddress = nativeValue.AddressOf().GetValueAsUnsigned()
#warn('CREATED PTR 2: %s' % val)
- return val
- if code == lldb.eTypeClassTypedef:
+ elif code == lldb.eTypeClassTypedef:
nativeTargetType = nativeType.GetUnqualifiedType()
if hasattr(nativeTargetType, 'GetCanonicalType'):
nativeTargetType = nativeTargetType.GetCanonicalType()
val = self.fromNativeValue(nativeValue.Cast(nativeTargetType))
val.type = self.fromNativeType(nativeType)
#warn('CREATED TYPEDEF: %s' % val)
- return val
+ else:
+ val = self.Value(self)
+ address = nativeValue.GetLoadAddress()
+ if not address is None:
+ val.laddress = address
+ if True:
+ data = nativeValue.GetData()
+ error = lldb.SBError()
+ size = nativeValue.GetType().GetByteSize()
+ if size > 1:
+ # 0 happens regularly e.g. for cross-shared-object types.
+ # 1 happens on Linux e.g. for QObject uses outside of QtCore.
+ try:
+ val.ldata = data.ReadRawData(error, 0, size)
+ except:
+ pass
- val = self.Value(self)
- address = nativeValue.GetLoadAddress()
- if not address is None:
- val.laddress = address
- if True:
- data = nativeValue.GetData()
- error = lldb.SBError()
- size = nativeValue.GetType().GetByteSize()
- if size > 1:
- # 0 happens regularly e.g. for cross-shared-object types.
- # 1 happens on Linux e.g. for QObject uses outside of QtCore.
- try:
- val.ldata = data.ReadRawData(error, 0, size)
- except:
- pass
-
- val.type = self.fromNativeType(nativeType)
- val.lIsInScope = nativeValue.IsInScope()
+ val.type = self.fromNativeType(nativeType)
- if code == lldb.eTypeClassEnumeration:
- intval = nativeValue.GetValueAsSigned()
- if hasattr(nativeType, 'get_enum_members_array'):
- for enumMember in nativeType.get_enum_members_array():
- # Even when asking for signed we get unsigned with LLDB 3.8.
- diff = enumMember.GetValueAsSigned() - intval
- mask = (1 << nativeType.GetByteSize() * 8) - 1
- if diff & mask == 0:
- path = nativeType.GetName().split('::')
- path[-1] = enumMember.GetName()
- val.ldisplay = '%s (%d)' % ('::'.join(path), intval)
- val.ldisplay = '%d' % intval
- elif code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat):
- val.ldisplay = str(nativeValue.GetValue())
- elif code == lldb.eTypeClassReference:
- derefNativeValue = nativeValue.Dereference()
- derefNativeValue = derefNativeValue.Cast(derefNativeValue.GetType().GetUnqualifiedType())
- val1 = self.Value(self)
- val1.type = val.type
- val1.targetValue = self.fromNativeValue(derefNativeValue)
- return val1
- #elif code == lldb.eTypeClassArray:
- # if hasattr(nativeType, 'GetArrayElementType'): # New in 3.8(?) / 350.x
- # val.type.ltarget = self.fromNativeType(nativeType.GetArrayElementType())
- # else:
- # fields = nativeType.get_fields_array()
- # if len(fields):
- # val.type.ltarget = self.fromNativeType(fields[0])
- #elif code == lldb.eTypeClassVector:
- # val.type.ltarget = self.fromNativeType(nativeType.GetVectorElementType())
+ if code == lldb.eTypeClassEnumeration:
+ intval = nativeValue.GetValueAsSigned()
+ if hasattr(nativeType, 'get_enum_members_array'):
+ for enumMember in nativeType.get_enum_members_array():
+ # Even when asking for signed we get unsigned with LLDB 3.8.
+ diff = enumMember.GetValueAsSigned() - intval
+ mask = (1 << nativeType.GetByteSize() * 8) - 1
+ if diff & mask == 0:
+ path = nativeType.GetName().split('::')
+ path[-1] = enumMember.GetName()
+ val.ldisplay = '%s (%d)' % ('::'.join(path), intval)
+ val.ldisplay = '%d' % intval
+ elif code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat):
+ val.ldisplay = str(nativeValue.GetValue())
+ #elif code == lldb.eTypeClassArray:
+ # if hasattr(nativeType, 'GetArrayElementType'): # New in 3.8(?) / 350.x
+ # val.type.ltarget = self.fromNativeType(nativeType.GetArrayElementType())
+ # else:
+ # fields = nativeType.get_fields_array()
+ # if len(fields):
+ # val.type.ltarget = self.fromNativeType(fields[0])
+ #elif code == lldb.eTypeClassVector:
+ # val.type.ltarget = self.fromNativeType(nativeType.GetVectorElementType())
+ val.lIsInScope = nativeValue.IsInScope()
val.name = nativeValue.GetName()
return val
@@ -1145,7 +1136,6 @@ class Dumper(DumperBase):
# default values: void foo(int = 0)
continue
value = self.fromNativeFrameValue(val)
- value.name = name
variables.append(value)
self.handleLocals(variables)