blob: b85d5a5bc00100c5481746caba969b75110f63c3 [file] [log] [blame]
# Copyright (c) 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
LLDB Support for Chromium types in Xcode
Add the following to your ~/.lldbinit:
command script import {Path to SRC Root}/tools/lldb/lldb_chrome.py
"""
import lldb
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand('type summary add -F ' +
'lldb_chrome.basestring16_SummaryProvider base::string16')
def basestring16_SummaryProvider(valobj, internal_dict):
s = valobj.GetValueForExpressionPath('.__r_.__value_.__s')
l = valobj.GetValueForExpressionPath('.__r_.__value_.__l')
size = s.GetChildMemberWithName('__size_').GetValueAsUnsigned(0)
is_short_string = size & 128 == 0 # Assumes _LIBCPP_BIG_ENDIAN is defined.
if is_short_string:
length = size >> 1
data = s.GetChildMemberWithName('__data_').GetPointeeData(0, length)
else:
length = l.GetChildMemberWithName('__size_').GetValueAsUnsigned(0)
data = l.GetChildMemberWithName('__data_').GetPointeeData(0, length)
error = lldb.SBError()
bytes_to_read = 2 * length
if not bytes_to_read:
return '""'
byte_string = data.ReadRawData(error, 0, bytes_to_read)
if error.fail:
return 'Summary error: %s' % error.description
else:
return '"' + byte_string.decode('utf-16') + '"'