(valobj)
| 87 | |
| 88 | |
| 89 | def printableQString(valobj): |
| 90 | pointer = 0 |
| 91 | length = 0 |
| 92 | if valobj.IsValid(): |
| 93 | d = valobj.GetChildMemberWithName('d') |
| 94 | data = d.GetChildMemberWithName('data') |
| 95 | offset = d.GetChildMemberWithName('offset') |
| 96 | size = d.GetChildMemberWithName('size') |
| 97 | |
| 98 | isQt4 = data.IsValid() |
| 99 | size_val = size.GetValueAsSigned(-1) |
| 100 | alloc = d.GetChildMemberWithName('alloc').GetValueAsUnsigned(0) |
| 101 | if isQt4: |
| 102 | alloc += 1 |
| 103 | |
| 104 | # some sanity check to see if we are dealing with garbage |
| 105 | if size_val < 0 or size_val >= alloc: |
| 106 | return None, 0, 0 |
| 107 | |
| 108 | tooLarge = u'' |
| 109 | if size_val > HiddenMemberProvider._capping_size(): |
| 110 | tooLarge = u'...' |
| 111 | size_val = HiddenMemberProvider._capping_size() |
| 112 | |
| 113 | if isQt4: |
| 114 | pointer = data.GetValueAsUnsigned(0) |
| 115 | elif offset.IsValid(): |
| 116 | pointer = d.GetValueAsUnsigned(0) + offset.GetValueAsUnsigned(0) |
| 117 | else: |
| 118 | qarraydata_t = valobj.GetTarget().FindFirstType('QArrayData') |
| 119 | if qarraydata_t.IsValid(): |
| 120 | pointer = d.GetValueAsUnsigned(0) + qarraydata_t.GetByteSize() |
| 121 | else: |
| 122 | pointer = d.GetValueAsUnsigned(0) + 24 # Fallback to hardcoded value |
| 123 | |
| 124 | # size in the number of chars, each char is 2 bytes in UTF16 |
| 125 | length = size_val * 2 |
| 126 | if length == 0: |
| 127 | return u'', pointer, length |
| 128 | |
| 129 | try: |
| 130 | error = lldb.SBError() |
| 131 | string_data = valobj.process.ReadMemory(pointer, length, error) |
| 132 | # The QString object might be not yet initialized. In this case size is a bogus value, |
| 133 | # and memory access may fail |
| 134 | if error.Success(): |
| 135 | content = string_data.decode('utf-16') |
| 136 | return content + tooLarge, pointer, length |
| 137 | except: |
| 138 | pass |
| 139 | return None, 0, 0 |
| 140 | |
| 141 | |
| 142 | def QStringSummaryProvider(valobj, internal_dict): |
no test coverage detected