From: Adrian Prantl Date: Fri, 16 Aug 2019 23:47:57 +0000 (+0000) Subject: Add LLDB dataformatters for llvm::StringRef and lldb_private::ConstString X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42e3d15bdf8242a0cef1f8bde8484c74ebc7cd59;p=llvm Add LLDB dataformatters for llvm::StringRef and lldb_private::ConstString These data formatters make the string value appear in Xcode's variables view (and on the command line) without having to expand the data structure. Differential Revision: https://reviews.llvm.org/D66354 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369175 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/utils/lldbDataFormatters.py b/utils/lldbDataFormatters.py index de0710adfc9..74f3222eaa0 100644 --- a/utils/lldbDataFormatters.py +++ b/utils/lldbDataFormatters.py @@ -21,6 +21,12 @@ def __lldb_init_module(debugger, internal_dict): debugger.HandleCommand('type summary add -w llvm ' '-F lldbDataFormatters.SmallStringSummaryProvider ' '-x "^llvm::SmallString<.+>$"') + debugger.HandleCommand('type summary add -w llvm ' + '-F lldbDataFormatters.StringRefSummaryProvider ' + '-x "^llvm::StringRef$"') + debugger.HandleCommand('type summary add -w llvm ' + '-F lldbDataFormatters.ConstStringSummaryProvider ' + '-x "^lldb_private::ConstString$"') # Pretty printer for llvm::SmallVector/llvm::SmallVectorImpl class SmallVectorSynthProvider: @@ -115,3 +121,20 @@ def SmallStringSummaryProvider(valobj, internal_dict): res += valobj.GetChildAtIndex(i).GetValue().strip("'") res += "\"" return res + +def StringRefSummaryProvider(valobj, internal_dict): + if valobj.GetNumChildren() == 2: + # StringRef's are also used to point at binary blobs in memory, + # so filter out suspiciously long strings. + max_length = 256 + length = valobj.GetChildAtIndex(1).GetValueAsUnsigned(max_length) + if length == 0: + return "NULL" + if length < max_length: + return valobj.GetChildAtIndex(0).GetSummary() + return "" + +def ConstStringSummaryProvider(valobj, internal_dict): + if valobj.GetNumChildren() == 1: + return valobj.GetChildAtIndex(0).GetSummary() + return ""