(valobj)
| 196 | |
| 197 | |
| 198 | def printableQByteArray(valobj): |
| 199 | if valobj.IsValid(): |
| 200 | d = valobj.GetChildMemberWithName('d') |
| 201 | data = d.GetChildMemberWithName('data') |
| 202 | offset = d.GetChildMemberWithName('offset') |
| 203 | size = d.GetChildMemberWithName('size') |
| 204 | |
| 205 | isQt4 = data.IsValid() |
| 206 | size_val = size.GetValueAsSigned(-1) |
| 207 | alloc = d.GetChildMemberWithName('alloc').GetValueAsUnsigned(0) |
| 208 | if isQt4: |
| 209 | alloc += 1 |
| 210 | |
| 211 | # sanity check |
| 212 | if size_val < 0 or size_val >= alloc: |
| 213 | return None, 0, 0 |
| 214 | |
| 215 | tooLarge = u'' |
| 216 | if size_val > HiddenMemberProvider._capping_size(): |
| 217 | tooLarge = u'...' |
| 218 | size_val = HiddenMemberProvider._capping_size() |
| 219 | |
| 220 | if isQt4: |
| 221 | pointer = data.GetValueAsUnsigned(0) |
| 222 | elif offset.IsValid(): |
| 223 | pointer = d.GetValueAsUnsigned(0) + offset.GetValueAsUnsigned(0) |
| 224 | else: |
| 225 | pointer = d.GetValueAsUnsigned(0) + 24 # Fallback to hardcoded value |
| 226 | |
| 227 | length = size_val |
| 228 | if length == 0: |
| 229 | return u'', pointer, length |
| 230 | |
| 231 | try: |
| 232 | error = lldb.SBError() |
| 233 | string_data = valobj.process.ReadMemory(pointer, length, error) |
| 234 | # The object might be not yet initialized. In this case size is a bogus value, |
| 235 | # and memory access may fail |
| 236 | if error.Success(): |
| 237 | # replace non-ascii byte with a space and get a printable version |
| 238 | ls = list(string_data) |
| 239 | for idx in range(length): |
| 240 | if ls[idx] in string.printable: |
| 241 | if ls[idx] != "'": |
| 242 | # convert tab, nl, ..., and '\\' to r'\\' |
| 243 | ls[idx] = ls[idx].__repr__()[1:-1] |
| 244 | else: |
| 245 | ls[idx] = r'\x{:02x}'.format(ord(ls[idx])) |
| 246 | content = u''.join(ls) |
| 247 | return content + tooLarge, pointer, length |
| 248 | except: |
| 249 | pass |
| 250 | return None, 0, 0 |
| 251 | |
| 252 | |
| 253 | def QByteArraySummaryProvider(valobj, internal_dict): |
no test coverage detected