52 lines · python
1"""2Test inferior restart when breakpoint is set on running target.3"""4 5import lldb6from lldbsuite.test.decorators import *7from lldbsuite.test.lldbtest import *8 9 10class BreakpointSetRestart(TestBase):11 BREAKPOINT_TEXT = "Set a breakpoint here"12 13 @skipIfNetBSD14 @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 state29 while self.dbg.GetListener().WaitForEvent(2, event):30 if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning:31 break32 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 event42 ) == lldb.eStateStopped and lldb.SBProcess.GetRestartedFromEvent(event):43 continue44 if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning:45 continue46 self.fail(47 "Setting a breakpoint generated an unexpected event: %s"48 % lldb.SBDebugger.StateAsCString(49 lldb.SBProcess.GetStateFromEvent(event)50 )51 )52