""" Test that 'gui' does not crash when adding new threads, which populate TreeItem's children and may be reallocated elsewhere. """ import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test.lldbpexpect import PExpectTest import sys class TestGuiSpawnThreadsTest(PExpectTest): # 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( 'breakpoint set -f main.cpp -p "break here"', substrs=["Breakpoint 1", "address ="], ) self.expect( 'breakpoint set -f main.cpp -p "before join"', substrs=["Breakpoint 2", "address ="], ) self.expect("run", substrs=["stop reason ="]) escape_key = chr(27).encode() # Start the GUI self.child.sendline("gui") self.child.expect_exact("Threads") self.child.expect_exact(f"thread #1: tid =") for i in range(5): # Stopped at the breakpoint, continue over the thread creation self.child.send("c") # Check the newly created thread self.child.expect_exact(f"thread #{i + 2}: tid =") # Exit GUI. self.child.send(escape_key) self.expect_prompt() self.quit()