MCPcopy Create free account
hub / github.com/KDE/kdevelop / printableQByteArray

Function printableQByteArray

plugins/lldb/formatters/qt.py:198–250  ·  view source on GitHub ↗
(valobj)

Source from the content-addressed store, hash-verified

196
197
198def 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
253def QByteArraySummaryProvider(valobj, internal_dict):

Callers 3

_updateMethod · 0.85
parseComponentsMethod · 0.85

Calls 5

rangeFunction · 0.85
IsValidMethod · 0.80
_capping_sizeMethod · 0.80
formatMethod · 0.80
joinMethod · 0.80

Tested by

no test coverage detected