| """ |
| Test lldb-dap stack trace containing x86 assembly |
| """ |
| |
| import lldbdap_testcase |
| from lldbsuite.test import lldbplatformutil |
| from lldbsuite.test.decorators import skipUnlessArch, skipUnlessPlatform |
| from lldbsuite.test.lldbtest import line_number |
| |
| |
| class TestDAP_stacktrace_x86(lldbdap_testcase.DAPTestCaseBase): |
| @skipUnlessArch("x86_64") |
| @skipUnlessPlatform(["linux"] + lldbplatformutil.getDarwinOSTriples()) |
| def test_stacktrace_x86(self): |
| """ |
| Tests that lldb-dap steps through correctly and the source lines are correct in x86 assembly. |
| """ |
| program = self.getBuildArtifact("a.out") |
| self.build_and_launch( |
| program, |
| initCommands=[ |
| "settings set target.process.thread.step-in-avoid-nodebug false" |
| ], |
| ) |
| |
| source = "main.c" |
| breakpoint_ids = self.set_source_breakpoints( |
| source, |
| [line_number(source, "// Break here")], |
| ) |
| self.continue_to_breakpoints(breakpoint_ids) |
| self.stepIn() |
| |
| frame = self.get_stackFrames()[0] |
| self.assertEqual( |
| frame["name"], |
| "no_branch_func", |
| "verify we are in the no_branch_func function", |
| ) |
| |
| self.assertEqual(frame["line"], 1, "verify we are at the start of the function") |
| minimum_assembly_lines = ( |
| line_number(source, "Assembly end") |
| - line_number(source, "Assembly start") |
| + 1 |
| ) |
| self.assertLessEqual( |
| 10, |
| minimum_assembly_lines, |
| "verify we have a reasonable number of assembly lines", |
| ) |
| |
| for i in range(2, minimum_assembly_lines): |
| self.stepIn() |
| frame = self.get_stackFrames()[0] |
| self.assertEqual( |
| frame["name"], |
| "no_branch_func", |
| "verify we are still in the no_branch_func function", |
| ) |
| self.assertEqual( |
| frame["line"], |
| i, |
| f"step in should advance a single line in the function to {i}", |
| ) |