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 12 mydir = TestBase.compute_mydir(__file__) 13 BREAKPOINT_TEXT = 'Set a breakpoint here' 14 15 @skipIfNetBSD 16 @skipIf(oslist=["freebsd"], 17 bugnumber="github.com/llvm/llvm-project/issues/56082") 18 def test_breakpoint_set_restart(self): 19 self.build() 20 21 exe = self.getBuildArtifact("a.out") 22 23 target = self.dbg.CreateTarget(exe) 24 self.assertTrue(target, VALID_TARGET) 25 26 self.dbg.SetAsync(True) 27 process = target.LaunchSimple( 28 None, None, self.get_process_working_directory()) 29 self.assertTrue(process, PROCESS_IS_VALID) 30 31 event = lldb.SBEvent() 32 # Wait for inferior to transition to running state 33 while self.dbg.GetListener().WaitForEvent(2, event): 34 if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning: 35 break 36 37 bp = target.BreakpointCreateBySourceRegex( 38 self.BREAKPOINT_TEXT, lldb.SBFileSpec('main.cpp')) 39 self.assertTrue( 40 bp.IsValid() and bp.GetNumLocations() == 1, 41 VALID_BREAKPOINT) 42 43 while self.dbg.GetListener().WaitForEvent(2, event): 44 if lldb.SBProcess.GetStateFromEvent( 45 event) == lldb.eStateStopped and lldb.SBProcess.GetRestartedFromEvent(event): 46 continue 47 if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning: 48 continue 49 self.fail( 50 "Setting a breakpoint generated an unexpected event: %s" % 51 lldb.SBDebugger.StateAsCString( 52 lldb.SBProcess.GetStateFromEvent(event))) 53