| """ |
| Test the 'gui' shortcuts 's','n','f','u','d' (step in, step over, step out, up, down) |
| """ |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test.lldbpexpect import PExpectTest |
| |
| class TestGuiBasicDebugCommandTest(PExpectTest): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| # PExpect uses many timeouts internally and doesn't play well |
| # under ASAN on a loaded machine.. |
| @skipIfAsan |
| @skipIfCursesSupportMissing |
| def test_gui(self): |
| self.build() |
| |
| self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100,500)) |
| self.expect('br set -f main.c -p "// Break here"', substrs=["Breakpoint 1", "address ="]) |
| self.expect("run", substrs=["stop reason ="]) |
| |
| escape_key = chr(27).encode() |
| |
| # Start the GUI and close the welcome window. |
| self.child.sendline("gui") |
| self.child.send(escape_key) |
| |
| # Simulate a simple debugging session. |
| self.child.send("s") # step |
| self.child.expect("return 1; // In function[^\r\n]+<<< Thread 1: step in") |
| self.child.send("u") # up |
| self.child.expect_exact("func(); // Break here") |
| self.child.send("d") # down |
| self.child.expect_exact("return 1; // In function") |
| self.child.send("f") # finish |
| self.child.expect("<<< Thread 1: step out") |
| self.child.send("s") # move onto the second one |
| self.child.expect("<<< Thread 1: step in") |
| self.child.send("n") # step over |
| self.child.expect("<<< Thread 1: step over") |
| |
| # Press escape to quit the gui |
| self.child.send(escape_key) |
| |
| self.expect_prompt() |
| self.quit() |