| import lldb | |
| @lldb.synthetic("MyContainer") | |
| class MyContainerSynthetic: | |
| """Formatter that mimicks libstdc++ std::vector use of CreateChildAtOffset.""" | |
| valobj: lldb.SBValue | |
| def __init__(self, valobj: lldb.SBValue, _) -> None: | |
| self.valobj = valobj | |
| def update(self) -> bool: | |
| self.data = self.valobj.GetChildMemberWithName("data") | |
| self.element_type = self.data.GetType().GetPointeeType() | |
| self.element_size = self.element_type.GetByteSize() | |
| self.count = self.valobj.GetChildMemberWithName("count").GetValueAsUnsigned(0) | |
| return True | |
| def num_children(self) -> int: | |
| return self.count | |
| def get_child_at_index(self, index: int) -> lldb.SBValue: | |
| if 0 <= index < self.count: | |
| offset = index * self.element_size | |
| return self.data.CreateChildAtOffset( | |
| f"[{index}]", offset, self.element_type | |
| ) | |
| return lldb.SBValue() |