1""" 2Test inferior restart when breakpoint is set on running target. 3""" 4 5import lldb 6from lldbsuite.test.decorators import * 7from lldbsuite.test.lldbtest import * 8 9 10class BreakpointSetRestart(TestBase): 11 BREAKPOINT_TEXT = "Set a breakpoint here" 12 13 @skipIfNetBSD 14 @skipIf(oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56082") 15 def test_breakpoint_set_restart(self): 16 self.build() 17 18 exe = self.getBuildArtifact("a.out") 19 20 target = self.dbg.CreateTarget(exe) 21 self.assertTrue(target, VALID_TARGET) 22 23 self.dbg.SetAsync(True) 24 process = target.LaunchSimple(None, None, self.get_process_working_directory()) 25 self.assertTrue(process, PROCESS_IS_VALID) 26 27 event = lldb.SBEvent() 28 # Wait for inferior to transition to running state 29 while self.dbg.GetListener().WaitForEvent(2, event): 30 if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning: 31 break 32 33 bp = target.BreakpointCreateBySourceRegex( 34 self.BREAKPOINT_TEXT, lldb.SBFileSpec("main.cpp") 35 ) 36 self.assertTrue(bp.IsValid(), VALID_BREAKPOINT) 37 self.assertEqual(bp.GetNumLocations(), 1, VALID_BREAKPOINT) 38 39 while self.dbg.GetListener().WaitForEvent(2, event): 40 if lldb.SBProcess.GetStateFromEvent( 41 event 42 ) == lldb.eStateStopped and lldb.SBProcess.GetRestartedFromEvent(event): 43 continue 44 if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning: 45 continue 46 self.fail( 47 "Setting a breakpoint generated an unexpected event: %s" 48 % lldb.SBDebugger.StateAsCString( 49 lldb.SBProcess.GetStateFromEvent(event) 50 ) 51 ) 52