Make sure lldbbridge.fromNativeValue always sets value name

Change-Id: I40296843bcbc504d6271a1f30ac4f8c4a1a2fe85
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Tor Arne Vestbø
2017-05-15 16:54:07 +02:00
parent ee722a047c
commit 4eac9533e1

View File

@@ -117,6 +117,7 @@ class Dumper(DumperBase):
nativeValue.SetPreferSyntheticValue(False) nativeValue.SetPreferSyntheticValue(False)
nativeType = nativeValue.GetType() nativeType = nativeValue.GetType()
code = nativeType.GetTypeClass() code = nativeType.GetTypeClass()
if code == lldb.eTypeClassReference: if code == lldb.eTypeClassReference:
nativeTargetType = nativeType.GetDereferencedType() nativeTargetType = nativeType.GetDereferencedType()
if not nativeTargetType.IsPointerType(): if not nativeTargetType.IsPointerType():
@@ -125,8 +126,7 @@ class Dumper(DumperBase):
val = self.createReferenceValue(nativeValue.GetValueAsUnsigned(), targetType) val = self.createReferenceValue(nativeValue.GetValueAsUnsigned(), targetType)
val.laddress = nativeValue.AddressOf().GetValueAsUnsigned() val.laddress = nativeValue.AddressOf().GetValueAsUnsigned()
#warn('CREATED REF: %s' % val) #warn('CREATED REF: %s' % val)
return val elif code == lldb.eTypeClassPointer:
if code == lldb.eTypeClassPointer:
nativeTargetType = nativeType.GetPointeeType() nativeTargetType = nativeType.GetPointeeType()
if not nativeTargetType.IsPointerType(): if not nativeTargetType.IsPointerType():
nativeTargetType = nativeTargetType.GetUnqualifiedType() nativeTargetType = nativeTargetType.GetUnqualifiedType()
@@ -135,66 +135,57 @@ class Dumper(DumperBase):
#warn('CREATED PTR 1: %s' % val) #warn('CREATED PTR 1: %s' % val)
val.laddress = nativeValue.AddressOf().GetValueAsUnsigned() val.laddress = nativeValue.AddressOf().GetValueAsUnsigned()
#warn('CREATED PTR 2: %s' % val) #warn('CREATED PTR 2: %s' % val)
return val elif code == lldb.eTypeClassTypedef:
if code == lldb.eTypeClassTypedef:
nativeTargetType = nativeType.GetUnqualifiedType() nativeTargetType = nativeType.GetUnqualifiedType()
if hasattr(nativeTargetType, 'GetCanonicalType'): if hasattr(nativeTargetType, 'GetCanonicalType'):
nativeTargetType = nativeTargetType.GetCanonicalType() nativeTargetType = nativeTargetType.GetCanonicalType()
val = self.fromNativeValue(nativeValue.Cast(nativeTargetType)) val = self.fromNativeValue(nativeValue.Cast(nativeTargetType))
val.type = self.fromNativeType(nativeType) val.type = self.fromNativeType(nativeType)
#warn('CREATED TYPEDEF: %s' % val) #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) val.type = self.fromNativeType(nativeType)
address = nativeValue.GetLoadAddress()
if not address is None: if code == lldb.eTypeClassEnumeration:
val.laddress = address intval = nativeValue.GetValueAsSigned()
if True: if hasattr(nativeType, 'get_enum_members_array'):
data = nativeValue.GetData() for enumMember in nativeType.get_enum_members_array():
error = lldb.SBError() # Even when asking for signed we get unsigned with LLDB 3.8.
size = nativeValue.GetType().GetByteSize() diff = enumMember.GetValueAsSigned() - intval
if size > 1: mask = (1 << nativeType.GetByteSize() * 8) - 1
# 0 happens regularly e.g. for cross-shared-object types. if diff & mask == 0:
# 1 happens on Linux e.g. for QObject uses outside of QtCore. path = nativeType.GetName().split('::')
try: path[-1] = enumMember.GetName()
val.ldata = data.ReadRawData(error, 0, size) val.ldisplay = '%s (%d)' % ('::'.join(path), intval)
except: val.ldisplay = '%d' % intval
pass 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.type = self.fromNativeType(nativeType)
val.lIsInScope = nativeValue.IsInScope() val.lIsInScope = nativeValue.IsInScope()
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())
val.name = nativeValue.GetName() val.name = nativeValue.GetName()
return val return val
@@ -1145,7 +1136,6 @@ class Dumper(DumperBase):
# default values: void foo(int = 0) # default values: void foo(int = 0)
continue continue
value = self.fromNativeFrameValue(val) value = self.fromNativeFrameValue(val)
value.name = name
variables.append(value) variables.append(value)
self.handleLocals(variables) self.handleLocals(variables)