diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2017-05-15 16:54:07 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2017-05-18 09:33:54 +0000 |
commit | 4eac9533e11c0abef588ed0f7193495d1c41873c (patch) | |
tree | f08920e50b98be312988685396faf8cc679c48fd /share | |
parent | ee722a047cfd4bee213343087519a0380f5227e8 (diff) | |
download | qt-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.py | 98 |
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) |