1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest SBBreakpoint APIs. 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprechtimport lldb 6*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 7*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 8*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 9*99451b44SJordan Rupprecht 10*99451b44SJordan Rupprecht 11*99451b44SJordan Rupprechtclass BreakpointAPITestCase(TestBase): 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 14*99451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 15*99451b44SJordan Rupprecht 16*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 17*99451b44SJordan Rupprecht def test_breakpoint_is_valid(self): 18*99451b44SJordan Rupprecht """Make sure that if an SBBreakpoint gets deleted its IsValid returns false.""" 19*99451b44SJordan Rupprecht self.build() 20*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht # Create a target by the debugger. 23*99451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 24*99451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 25*99451b44SJordan Rupprecht 26*99451b44SJordan Rupprecht # Now create a breakpoint on main.c by name 'AFunction'. 27*99451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByName('AFunction', 'a.out') 28*99451b44SJordan Rupprecht #print("breakpoint:", breakpoint) 29*99451b44SJordan Rupprecht self.assertTrue(breakpoint and 30*99451b44SJordan Rupprecht breakpoint.GetNumLocations() == 1, 31*99451b44SJordan Rupprecht VALID_BREAKPOINT) 32*99451b44SJordan Rupprecht 33*99451b44SJordan Rupprecht # Now delete it: 34*99451b44SJordan Rupprecht did_delete = target.BreakpointDelete(breakpoint.GetID()) 35*99451b44SJordan Rupprecht self.assertTrue( 36*99451b44SJordan Rupprecht did_delete, 37*99451b44SJordan Rupprecht "Did delete the breakpoint we just created.") 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht # Make sure we can't find it: 40*99451b44SJordan Rupprecht del_bkpt = target.FindBreakpointByID(breakpoint.GetID()) 41*99451b44SJordan Rupprecht self.assertTrue(not del_bkpt, "We did delete the breakpoint.") 42*99451b44SJordan Rupprecht 43*99451b44SJordan Rupprecht # Finally make sure the original breakpoint is no longer valid. 44*99451b44SJordan Rupprecht self.assertTrue( 45*99451b44SJordan Rupprecht not breakpoint, 46*99451b44SJordan Rupprecht "Breakpoint we deleted is no longer valid.") 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 49*99451b44SJordan Rupprecht def test_target_delete(self): 50*99451b44SJordan Rupprecht """Make sure that if an SBTarget gets deleted the associated 51*99451b44SJordan Rupprecht Breakpoint's IsValid returns false.""" 52*99451b44SJordan Rupprecht 53*99451b44SJordan Rupprecht self.build() 54*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 55*99451b44SJordan Rupprecht 56*99451b44SJordan Rupprecht # Create a target by the debugger. 57*99451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 58*99451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 59*99451b44SJordan Rupprecht 60*99451b44SJordan Rupprecht # Now create a breakpoint on main.c by name 'AFunction'. 61*99451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByName('AFunction', 'a.out') 62*99451b44SJordan Rupprecht #print("breakpoint:", breakpoint) 63*99451b44SJordan Rupprecht self.assertTrue(breakpoint and 64*99451b44SJordan Rupprecht breakpoint.GetNumLocations() == 1, 65*99451b44SJordan Rupprecht VALID_BREAKPOINT) 66*99451b44SJordan Rupprecht location = breakpoint.GetLocationAtIndex(0) 67*99451b44SJordan Rupprecht self.assertTrue(location.IsValid()) 68*99451b44SJordan Rupprecht 69*99451b44SJordan Rupprecht self.assertTrue(self.dbg.DeleteTarget(target)) 70*99451b44SJordan Rupprecht self.assertFalse(breakpoint.IsValid()) 71*99451b44SJordan Rupprecht self.assertFalse(location.IsValid()) 72