From 28d50e3bc33d9d16a9ebfb4d809d4836d557abb5 Mon Sep 17 00:00:00 2001 From: David Mentler Date: Wed, 1 Oct 2025 20:45:42 +0200 Subject: [PATCH] ImStrv: Added ImStrv formatter for LLDB (e.g. Xcode) --- misc/debuggers/imgui_lldb.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/misc/debuggers/imgui_lldb.py b/misc/debuggers/imgui_lldb.py index 7d3c6bfcb..790669add 100644 --- a/misc/debuggers/imgui_lldb.py +++ b/misc/debuggers/imgui_lldb.py @@ -91,6 +91,35 @@ class ImRectSummary(object): return f"Min=({minX}, {minY}) Max=({maxX}, {maxY}) Size=({maxX - minX}, {maxY - minY})" +class ImStrvSummary(object): + def __init__(self, valobj, internal_dict): + self.valobj = valobj + + def update(self): + pass + + def get_summary(self): + begin = self.valobj.GetChildMemberWithName("Begin").GetValueAsUnsigned() + end = self.valobj.GetChildMemberWithName("End").GetValueAsUnsigned() + + if begin == 0: + return "" + + if end < begin: + return "" + + error = lldb.SBError() + data = self.valobj.GetProcess().ReadMemory(begin, end - begin, error) + + if not error.Success(): + return "" + + # Turn the byte sequence into utf-8, escape non-printables + data = data.decode("utf-8", errors="backslashreplace") + data = repr(data)[1:-1] + + return f'"{data}"' + def get_active_enum_flags(valobj): flag_set = set() @@ -187,3 +216,4 @@ def __lldb_init_module(debugger, internal_dict): add_summary("^ImVec4$", "x=${var.x} y=${var.y} z=${var.z} w=${var.w}") add_summary("^ImRect$", ImRectSummary) add_summary("^ImGuiWindow$", ImGuiWindowSummary) + add_summary("^ImStrv", ImStrvSummary)