[llvm] r369175 - Add LLDB dataformatters for llvm::StringRef and lldb_private::ConstString

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 16 16:47:57 PDT 2019


Author: adrian
Date: Fri Aug 16 16:47:57 2019
New Revision: 369175

URL: http://llvm.org/viewvc/llvm-project?rev=369175&view=rev
Log:
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

Modified:
    llvm/trunk/utils/lldbDataFormatters.py

Modified: llvm/trunk/utils/lldbDataFormatters.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lldbDataFormatters.py?rev=369175&r1=369174&r2=369175&view=diff
==============================================================================
--- llvm/trunk/utils/lldbDataFormatters.py (original)
+++ llvm/trunk/utils/lldbDataFormatters.py Fri Aug 16 16:47:57 2019
@@ -21,6 +21,12 @@ def __lldb_init_module(debugger, interna
     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, i
       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 ""




More information about the llvm-commits mailing list