199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest inferior restart when breakpoint is set on running target. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtimport lldb 699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 899451b44SJordan Rupprecht 999451b44SJordan Rupprecht 1099451b44SJordan Rupprechtclass BreakpointSetRestart(TestBase): 112238dcc3SJonas Devlieghere BREAKPOINT_TEXT = "Set a breakpoint here" 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht @skipIfNetBSD 142238dcc3SJonas Devlieghere @skipIf(oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56082") 1599451b44SJordan Rupprecht def test_breakpoint_set_restart(self): 1699451b44SJordan Rupprecht self.build() 1799451b44SJordan Rupprecht 1899451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 1999451b44SJordan Rupprecht 2099451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2199451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2299451b44SJordan Rupprecht 2399451b44SJordan Rupprecht self.dbg.SetAsync(True) 242238dcc3SJonas Devlieghere process = target.LaunchSimple(None, None, self.get_process_working_directory()) 2599451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 2699451b44SJordan Rupprecht 2799451b44SJordan Rupprecht event = lldb.SBEvent() 2899451b44SJordan Rupprecht # Wait for inferior to transition to running state 2999451b44SJordan Rupprecht while self.dbg.GetListener().WaitForEvent(2, event): 3099451b44SJordan Rupprecht if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning: 3199451b44SJordan Rupprecht break 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht bp = target.BreakpointCreateBySourceRegex( 342238dcc3SJonas Devlieghere self.BREAKPOINT_TEXT, lldb.SBFileSpec("main.cpp") 352238dcc3SJonas Devlieghere ) 36*aad78740SMichael Buch self.assertTrue(bp.IsValid(), VALID_BREAKPOINT) 37*aad78740SMichael Buch self.assertEqual(bp.GetNumLocations(), 1, VALID_BREAKPOINT) 3899451b44SJordan Rupprecht 3999451b44SJordan Rupprecht while self.dbg.GetListener().WaitForEvent(2, event): 4099451b44SJordan Rupprecht if lldb.SBProcess.GetStateFromEvent( 412238dcc3SJonas Devlieghere event 422238dcc3SJonas Devlieghere ) == lldb.eStateStopped and lldb.SBProcess.GetRestartedFromEvent(event): 4399451b44SJordan Rupprecht continue 4499451b44SJordan Rupprecht if lldb.SBProcess.GetStateFromEvent(event) == lldb.eStateRunning: 4599451b44SJordan Rupprecht continue 4699451b44SJordan Rupprecht self.fail( 472238dcc3SJonas Devlieghere "Setting a breakpoint generated an unexpected event: %s" 482238dcc3SJonas Devlieghere % lldb.SBDebugger.StateAsCString( 492238dcc3SJonas Devlieghere lldb.SBProcess.GetStateFromEvent(event) 502238dcc3SJonas Devlieghere ) 512238dcc3SJonas Devlieghere ) 52