| """ | |
| 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): | |
| # PExpect uses many timeouts internally and doesn't play well | |
| # under ASAN on a loaded machine.. | |
| @skipIfAsan | |
| @skipIf(bugnumber="llvm.org/pr51833") | |
| @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. | |
| self.child.sendline("gui") | |
| # 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("// Dummy command 1[^\r\n]+<<< Thread 1: step over") | |
| self.child.send("n") | |
| # Test that 'up' + 'step out' steps out of the selected function. | |
| self.child.send("s") # move into func_up() | |
| self.child.expect("// In func_up") | |
| self.child.send("s") # move into func_down() | |
| self.child.expect("// In func_down") | |
| self.child.send("u") # up | |
| self.child.expect("// In func_up") | |
| self.child.send("f") # finish | |
| self.child.expect("// Dummy command 2[^\r\n]+<<< Thread 1: step out") | |
| self.child.send("n") | |
| # Press escape to quit the gui | |
| self.child.send(escape_key) | |
| self.expect_prompt() | |
| self.quit() |