| """ |
| Test lldb-dap launch request. |
| """ |
| |
| from lldbsuite.test.decorators import skipIf |
| from lldbsuite.test.lldbtest import line_number |
| import lldbdap_testcase |
| |
| |
| class TestDAP_launch_commands(lldbdap_testcase.DAPTestCaseBase): |
| """ |
| Tests the "initCommands", "preRunCommands", "stopCommands", |
| "terminateCommands" and "exitCommands" that can be passed during |
| launch. |
| |
| "initCommands" are a list of LLDB commands that get executed |
| before the target is created. |
| "preRunCommands" are a list of LLDB commands that get executed |
| after the target has been created and before the launch. |
| "stopCommands" are a list of LLDB commands that get executed each |
| time the program stops. |
| "exitCommands" are a list of LLDB commands that get executed when |
| the process exits |
| "terminateCommands" are a list of LLDB commands that get executed when |
| the debugger session terminates. |
| """ |
| |
| @skipIf(archs=["arm$", "aarch64"], bugnumber=6933) |
| def test(self): |
| program = self.getBuildArtifact("a.out") |
| initCommands = ["target list", "platform list"] |
| preRunCommands = ["image list a.out", "image dump sections a.out"] |
| postRunCommands = ["help trace", "help process trace"] |
| stopCommands = ["frame variable", "bt"] |
| exitCommands = ["expr 2+3", "expr 3+4"] |
| terminateCommands = ["expr 4+2"] |
| self.build_and_launch( |
| program, |
| initCommands=initCommands, |
| preRunCommands=preRunCommands, |
| postRunCommands=postRunCommands, |
| stopCommands=stopCommands, |
| exitCommands=exitCommands, |
| terminateCommands=terminateCommands, |
| ) |
| self.dap_server.wait_for_initialized() |
| |
| # Get output from the console. This should contain both the |
| # "initCommands" and the "preRunCommands". |
| output = self.collect_console(pattern=postRunCommands[-1]) |
| # Verify all "initCommands" were found in console output |
| self.verify_commands("initCommands", output, initCommands) |
| # Verify all "preRunCommands" were found in console output |
| self.verify_commands("preRunCommands", output, preRunCommands) |
| # Verify all "postRunCommands" were found in console output |
| self.verify_commands("postRunCommands", output, postRunCommands) |
| |
| source = "main.c" |
| first_line = line_number(source, "// breakpoint 1") |
| second_line = line_number(source, "// breakpoint 2") |
| lines = [first_line, second_line] |
| |
| # Set 2 breakpoints so we can verify that "stopCommands" get run as the |
| # breakpoints get hit |
| breakpoint_ids = self.set_source_breakpoints(source, lines) |
| self.assertEqual( |
| len(breakpoint_ids), len(lines), "expect correct number of breakpoints" |
| ) |
| |
| # Continue after launch and hit the first breakpoint. |
| # Get output from the console. This should contain both the |
| # "stopCommands" that were run after the first breakpoint was hit |
| self.continue_to_breakpoints(breakpoint_ids) |
| output = self.collect_console(pattern=stopCommands[-1]) |
| self.verify_commands("stopCommands", output, stopCommands) |
| |
| # Continue again and hit the second breakpoint. |
| # Get output from the console. This should contain both the |
| # "stopCommands" that were run after the second breakpoint was hit |
| self.continue_to_breakpoints(breakpoint_ids) |
| output = self.collect_console(pattern=stopCommands[-1]) |
| self.verify_commands("stopCommands", output, stopCommands) |
| |
| # Continue until the program exits |
| self.continue_to_exit() |
| # Get output from the console. This should contain both the |
| # "exitCommands" that were run after the second breakpoint was hit |
| # and the "terminateCommands" due to the debugging session ending |
| output = self.collect_console(pattern=terminateCommands[0]) |
| self.verify_commands("exitCommands", output, exitCommands) |
| self.verify_commands("terminateCommands", output, terminateCommands) |