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