ImStrv: Added ImStrv formatter for LLDB (e.g. Xcode)
diff --git a/misc/debuggers/imgui_lldb.py b/misc/debuggers/imgui_lldb.py
index 7d3c6bf..790669a 100644
--- a/misc/debuggers/imgui_lldb.py
+++ b/misc/debuggers/imgui_lldb.py
@@ -91,6 +91,35 @@
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 "<null>"
+
+ if end < begin:
+ return "<invalid>"
+
+ error = lldb.SBError()
+ data = self.valobj.GetProcess().ReadMemory(begin, end - begin, error)
+
+ if not error.Success():
+ return "<failed to read memory>"
+
+ # 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 @@
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)