]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - examples/summaries/unicode_strings.py
Vendor import of lldb trunk r256945:
[FreeBSD/FreeBSD.git] / examples / summaries / unicode_strings.py
1 """
2 Example data formatters for strings represented as (pointer,length) pairs
3 encoded in UTF8/16/32 for use with the LLDB debugger
4
5 To use in your projects, tweak the children names as appropriate for your data structures
6 and use as summaries for your data types
7
8 part of The LLVM Compiler Infrastructure
9 This file is distributed under the University of Illinois Open Source
10 License. See LICENSE.TXT for details.
11 """
12
13 import lldb
14 def 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
25 def 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
37 def 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