| """ |
| Test stepping out of an inline frame that is not frame zero. |
| """ |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class TestThreadStepOutInline(TestBase): |
| NO_DEBUG_INFO_TESTCASE = True |
| |
| def step_out_of_frame(self, frame_idx, function, marker): |
| self.build() |
| _, _, thread, _ = lldbutil.run_to_name_breakpoint(self, "sink") |
| self.assertTrue(thread.GetFrameAtIndex(frame_idx).IsInlined()) |
| |
| thread.StepOutOfFrame(thread.GetFrameAtIndex(frame_idx)) |
| |
| self.assertStopReason(thread.GetStopReason(), lldb.eStopReasonPlanComplete) |
| frame = thread.GetFrameAtIndex(0) |
| self.assertEqual(frame.GetFunctionName(), function) |
| self.assertEqual(frame.GetLineEntry().GetLine(), line_number("main.c", marker)) |
| |
| def test_step_out_of_frame_1(self): |
| self.step_out_of_frame(1, "level1", "// after level2") |
| |
| def test_step_out_of_frame_2(self): |
| self.step_out_of_frame(2, "main", "// after level1") |