xref: /llvm-project/lldb/test/API/lang/cpp/break-on-initializers/TestBreakOnCPP11Initializers.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1"""
2When using C++11 in place member initialization, show that we
3can set and hit breakpoints on initialization lines.  This is a
4little bit tricky because we try not to move file and line breakpoints
5across function boundaries but these lines are outside the source range
6of the constructor.
7"""
8
9
10import lldb
11import lldbsuite.test.lldbutil as lldbutil
12from lldbsuite.test.lldbtest import *
13
14
15class TestCase(TestBase):
16    def test_breakpoints_on_initializers(self):
17        """Show we can set breakpoints on initializers appearing both before
18        and after the constructor body, and hit them."""
19        self.build()
20        self.main_source_file = lldb.SBFileSpec("main.cpp")
21        self.first_initializer_line = line_number(
22            "main.cpp", "Set the before constructor breakpoint here"
23        )
24        self.second_initializer_line = line_number(
25            "main.cpp", "Set the after constructor breakpoint here"
26        )
27
28        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
29            self, " Set a breakpoint here to get started", self.main_source_file
30        )
31
32        # Now set breakpoints on the two initializer lines we found in the test startup:
33        bkpt1 = target.BreakpointCreateByLocation(
34            self.main_source_file, self.first_initializer_line
35        )
36        self.assertEqual(bkpt1.GetNumLocations(), 1)
37        bkpt2 = target.BreakpointCreateByLocation(
38            self.main_source_file, self.second_initializer_line
39        )
40        self.assertEqual(bkpt2.GetNumLocations(), 1)
41
42        # Now continue, we should stop at the two breakpoints above, first the one before, then
43        # the one after.
44        self.assertEqual(
45            len(lldbutil.continue_to_breakpoint(process, bkpt1)),
46            1,
47            "Hit first breakpoint",
48        )
49        self.assertEqual(
50            len(lldbutil.continue_to_breakpoint(process, bkpt2)),
51            1,
52            "Hit second breakpoint",
53        )
54