xref: /llvm-project/lldb/test/API/lang/cpp/breakpoint-commands/TestCPPBreakpointCommands.py (revision 99451b4453688a94c6014cac233d371ab4cc342d)
1"""
2Test lldb breakpoint command for CPP methods & functions in a namespace.
3"""
4
5
6
7import lldb
8from lldbsuite.test.decorators import *
9from lldbsuite.test.lldbtest import *
10from lldbsuite.test import lldbutil
11
12
13class CPPBreakpointCommandsTestCase(TestBase):
14
15    mydir = TestBase.compute_mydir(__file__)
16
17    def make_breakpoint(self, name, type, expected_num_locations):
18        bkpt = self.target.BreakpointCreateByName(name,
19                                                  type,
20                                                  self.a_out_module,
21                                                  self.nested_comp_unit)
22        num_locations = bkpt.GetNumLocations()
23        self.assertTrue(
24            num_locations == expected_num_locations,
25            "Wrong number of locations for '%s', expected: %d got: %d" %
26            (name,
27             expected_num_locations,
28             num_locations))
29        return bkpt
30
31    def test_cpp_breakpoint_cmds(self):
32        """Test a sequence of breakpoint command add, list, and delete."""
33        self.build()
34
35        exe = self.getBuildArtifact("a.out")
36
37        # Create a target from the debugger.
38
39        self.target = self.dbg.CreateTarget(exe)
40        self.assertTrue(self.target, VALID_TARGET)
41
42        self.a_out_module = lldb.SBFileSpecList()
43        self.a_out_module.Append(lldb.SBFileSpec(exe))
44
45        self.nested_comp_unit = lldb.SBFileSpecList()
46        self.nested_comp_unit.Append(lldb.SBFileSpec("nested.cpp"))
47
48        # First provide ONLY the method name.  This should get everybody...
49        self.make_breakpoint("Function",
50                             lldb.eFunctionNameTypeAuto,
51                             5)
52
53        # Now add the Baz class specifier.  This should get the version contained in Bar,
54        # AND the one contained in ::
55        self.make_breakpoint("Baz::Function",
56                             lldb.eFunctionNameTypeAuto,
57                             2)
58
59        # Then add the Bar::Baz specifier.  This should get the version
60        # contained in Bar only
61        self.make_breakpoint("Bar::Baz::Function",
62                             lldb.eFunctionNameTypeAuto,
63                             1)
64
65        self.make_breakpoint("Function",
66                             lldb.eFunctionNameTypeMethod,
67                             3)
68
69        self.make_breakpoint("Baz::Function",
70                             lldb.eFunctionNameTypeMethod,
71                             2)
72
73        self.make_breakpoint("Bar::Baz::Function",
74                             lldb.eFunctionNameTypeMethod,
75                             1)
76
77        self.make_breakpoint("Function",
78                             lldb.eFunctionNameTypeBase,
79                             2)
80
81        self.make_breakpoint("Bar::Function",
82                             lldb.eFunctionNameTypeBase,
83                             1)
84