| """ | |
| Test the 'gui' shortcut 'b' (toggle breakpoint). | |
| """ | |
| 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 | |
| @skipIfCursesSupportMissing | |
| @skipIf(oslist=["linux"], archs=["arm$", "aarch64"]) | |
| def test_gui(self): | |
| self.build() | |
| self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100, 500)) | |
| self.expect( | |
| 'br set -o true -f main.c -p "// First break here"', | |
| substrs=["Breakpoint 1", "address ="], | |
| ) | |
| self.expect("run", substrs=["stop reason ="]) | |
| self.child.sendline("breakpoint list") | |
| self.child.expect_exact("No breakpoints currently set.") | |
| escape_key = chr(27).encode() | |
| down_key = chr(27) + "OB" # for vt100 terminal (lldbexpect sets TERM=vt100) | |
| # Start the GUI. | |
| self.child.sendline("gui") | |
| self.child.expect_exact("Sources") # wait for gui | |
| # Go to next line, set a breakpoint. | |
| self.child.send(down_key) | |
| self.child.send("b") | |
| self.child.send(escape_key) | |
| self.expect_prompt() | |
| self.child.sendline("breakpoint list") | |
| self.child.expect("2: file = '[^']*main.c', line = 3,.*") | |
| self.child.sendline("gui") | |
| self.child.expect_exact("Sources") | |
| # Go two lines down ("gui" resets position), set a breakpoint. | |
| self.child.send(down_key) | |
| self.child.send(down_key) | |
| self.child.send("b") | |
| self.child.send(escape_key) | |
| self.expect_prompt() | |
| self.child.sendline("breakpoint list") | |
| self.child.expect("2: file = '[^']*main.c', line = 3,") | |
| self.child.expect("3: file = '[^']*main.c', line = 4,") | |
| self.child.sendline("gui") | |
| self.child.expect_exact("Sources") | |
| # Toggle both the breakpoints (remove them). | |
| self.child.send(down_key) | |
| self.child.send("b") | |
| self.child.send(down_key) | |
| self.child.send("b") | |
| self.child.send(escape_key) | |
| self.expect_prompt() | |
| self.child.sendline("breakpoint list") | |
| self.child.expect_exact("No breakpoints currently set.") | |
| self.child.sendline("gui") | |
| self.child.expect_exact("Sources") | |
| # Press escape to quit the gui | |
| self.child.send(escape_key) | |
| self.expect_prompt() | |
| self.quit() |