1""" 2Example data formatters for strings represented as (pointer,length) pairs 3encoded in UTF8/16/32 for use with the LLDB debugger 4 5To use in your projects, tweak the children names as appropriate for your data structures 6and use as summaries for your data types 7 8part of The LLVM Compiler Infrastructure 9This file is distributed under the University of Illinois Open Source 10License. See LICENSE.TXT for details. 11""" 12 13import lldb 14def utf8_summary(value,unused): 15 pointer = value.GetChildMemberWithName("first").GetValueAsUnsigned(0) 16 length = value.GetChildMemberWithName("second").GetValueAsUnsigned(0) 17 if pointer == 0: 18 return False 19 if length == 0: 20 return '""' 21 error = lldb.SBError() 22 string_data = value.process.ReadMemory(pointer, length, error) 23 return '"%s"' % (string_data) # utf8 is safe to emit as-is on OSX 24 25def utf16_summary(value,unused): 26 pointer = value.GetChildMemberWithName("first").GetValueAsUnsigned(0) 27 length = value.GetChildMemberWithName("second").GetValueAsUnsigned(0) 28 # assume length is in bytes - if in UTF16 chars, just multiply by 2 29 if pointer == 0: 30 return False 31 if length == 0: 32 return '""' 33 error = lldb.SBError() 34 string_data = value.process.ReadMemory(pointer, length, error) 35 return '"%s"' % (string_data.decode('utf-16').encode('utf-8')) # utf8 is safe to emit as-is on OSX 36 37def utf32_summary(value,unused): 38 pointer = value.GetChildMemberWithName("first").GetValueAsUnsigned(0) 39 length = value.GetChildMemberWithName("second").GetValueAsUnsigned(0) 40 # assume length is in bytes - if in UTF32 chars, just multiply by 4 41 if pointer == 0: 42 return False 43 if length == 0: 44 return '""' 45 error = lldb.SBError() 46 string_data = value.process.ReadMemory(pointer, length, error) 47 return '"%s"' % (string_data.decode('utf-32').encode('utf-8')) # utf8 is safe to emit as-is on OSX 48 49