import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil from typing import Union class TestCase(TestBase): NO_DEBUG_INFO_TESTCASE = True def test(self): self.build() _, _, thread, _ = lldbutil.run_to_source_breakpoint( self, "break here", lldb.SBFileSpec("main.cpp") ) frame = thread.GetFrameAtIndex(0) self._do_test(frame, "parent", "child") self._do_test(frame, "vec", 0) # Test Python synthetic formatters using CreateChildAtOffset. self.runCmd("command script import MyContainer_synthetic.py") self._do_test(frame, "container", 0) def _do_test( self, frame: lldb.SBFrame, parent_name: str, child_key: Union[str, int] ): parent = frame.FindVariable(parent_name) self.assertTrue(parent.IsValid()) if isinstance(child_key, int): child = parent.GetChildAtIndex(child_key) else: assert isinstance(child_key, str) child = parent.GetChildMemberWithName(child_key) self.assertTrue(child.IsValid()) # GetParent of child should be the original parent. child_parent = child.GetParent() self.assertTrue(child_parent.IsValid()) self.assertEqual(child_parent.name, parent_name) self.assertEqual(child_parent.GetID(), parent.GetID())