| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class ThunkTest(TestBase): |
| def test_step_through_thunk(self): |
| self.build() |
| lldbutil.run_to_name_breakpoint(self, "testit") |
| |
| # Make sure we step through the thunk into Derived1::doit |
| self.expect( |
| "step", |
| STEP_IN_SUCCEEDED, |
| substrs=["stop reason = step in", "Derived1::doit"], |
| ) |
| |
| self.runCmd("continue") |
| |
| self.expect( |
| "step", |
| STEP_IN_SUCCEEDED, |
| substrs=["stop reason = step in", "Derived2::doit"], |
| ) |
| |
| @skipIfWindows |
| def test_step_out_thunk(self): |
| self.build() |
| lldbutil.run_to_name_breakpoint(self, "testit_debug") |
| |
| # Make sure we step out of the thunk and end up in testit_debug. |
| source = "main.cpp" |
| line = line_number(source, "// Step here") |
| self.expect( |
| "step", |
| STEP_IN_SUCCEEDED, |
| substrs=["stop reason = step in", "{}:{}".format(source, line)], |
| ) |
| |
| self.runCmd("continue") |
| |
| self.expect( |
| "step", |
| STEP_IN_SUCCEEDED, |
| substrs=["stop reason = step in", "Derived2::doit_debug"], |
| ) |