forked from OSchip/llvm-project
An example of data formatters that generate a summary for a Unicode UTF encoded string represented as a (pointer,length) pair
llvm-svn: 192206
This commit is contained in:
parent
cc7a0ff857
commit
64d2a2853b
|
@ -0,0 +1,48 @@
|
|||
"""
|
||||
Example data formatters for strings represented as (pointer,length) pairs
|
||||
encoded in UTF8/16/32 for use with the LLDB debugger
|
||||
|
||||
To use in your projects, tweak the children names as appropriate for your data structures
|
||||
and use as summaries for your data types
|
||||
|
||||
part of The LLVM Compiler Infrastructure
|
||||
This file is distributed under the University of Illinois Open Source
|
||||
License. See LICENSE.TXT for details.
|
||||
"""
|
||||
|
||||
import lldb
|
||||
def utf8_summary(value,unused):
|
||||
pointer = value.GetChildMemberWithName("first").GetValueAsUnsigned(0)
|
||||
length = value.GetChildMemberWithName("second").GetValueAsUnsigned(0)
|
||||
if pointer == 0:
|
||||
return False
|
||||
if length == 0:
|
||||
return '""'
|
||||
error = lldb.SBError()
|
||||
string_data = value.process.ReadMemory(pointer, length, error)
|
||||
return '"%s"' % (string_data) # utf8 is safe to emit as-is on OSX
|
||||
|
||||
def utf16_summary(value,unused):
|
||||
pointer = value.GetChildMemberWithName("first").GetValueAsUnsigned(0)
|
||||
length = value.GetChildMemberWithName("second").GetValueAsUnsigned(0)
|
||||
# assume length is in bytes - if in UTF16 chars, just multiply by 2
|
||||
if pointer == 0:
|
||||
return False
|
||||
if length == 0:
|
||||
return '""'
|
||||
error = lldb.SBError()
|
||||
string_data = value.process.ReadMemory(pointer, length, error)
|
||||
return '"%s"' % (string_data.decode('utf-16').encode('utf-8')) # utf8 is safe to emit as-is on OSX
|
||||
|
||||
def utf32_summary(value,unused):
|
||||
pointer = value.GetChildMemberWithName("first").GetValueAsUnsigned(0)
|
||||
length = value.GetChildMemberWithName("second").GetValueAsUnsigned(0)
|
||||
# assume length is in bytes - if in UTF32 chars, just multiply by 4
|
||||
if pointer == 0:
|
||||
return False
|
||||
if length == 0:
|
||||
return '""'
|
||||
error = lldb.SBError()
|
||||
string_data = value.process.ReadMemory(pointer, length, error)
|
||||
return '"%s"' % (string_data.decode('utf-32').encode('utf-8')) # utf8 is safe to emit as-is on OSX
|
||||
|
Loading…
Reference in New Issue