aboutsummaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/functionalities/breakpoint/breakpoint_options/TestBreakpointOptions.py
blob: c0c2267a83621e7e609be2e935092d62acedb2ed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"""
Test breakpoint command for different options.
"""

from __future__ import print_function


import os
import lldb
from lldbsuite.test.lldbtest import *
import lldbsuite.test.lldbutil as lldbutil


class BreakpointOptionsTestCase(TestBase):

    mydir = TestBase.compute_mydir(__file__)

    def test(self):
        """Test breakpoint command for different options."""
        self.build()
        self.breakpoint_options_test()

    def setUp(self):
        # Call super's setUp().
        TestBase.setUp(self)
        # Find the line number to break inside main().
        self.line = line_number('main.cpp', '// Set break point at this line.')

    def breakpoint_options_test(self):
        """Test breakpoint command for different options."""
        exe = os.path.join(os.getcwd(), "a.out")
        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)

        # This should create a breakpoint with 1 locations.
        lldbutil.run_break_set_by_file_and_line(
            self,
            "main.cpp",
            self.line,
            extra_options="-K 1",
            num_expected_locations=1)
        lldbutil.run_break_set_by_file_and_line(
            self,
            "main.cpp",
            self.line,
            extra_options="-K 0",
            num_expected_locations=1)

        # This should create a breakpoint 0 locations.
        lldbutil.run_break_set_by_file_and_line(
            self,
            "main.cpp",
            self.line,
            extra_options="-m 0",
            num_expected_locations=0)

        # Run the program.
        self.runCmd("run", RUN_SUCCEEDED)

        # Stopped once.
        self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT,
                    substrs=["stop reason = breakpoint 2."])

        # Check the list of breakpoint.
        self.expect(
            "breakpoint list -f",
            "Breakpoint locations shown correctly",
            substrs=[
                "1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" %
                self.line,
                "2: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" %
                self.line,
                "3: file = 'main.cpp', line = %d, exact_match = 1, locations = 0" %
                self.line])

        # Continue the program, there should be another stop.
        self.runCmd("process continue")

        # Stopped again.
        self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT,
                    substrs=["stop reason = breakpoint 1."])

        # Continue the program, we should exit.
        self.runCmd("process continue")

        # We should exit.
        self.expect("process status", "Process exited successfully",
                    patterns=["^Process [0-9]+ exited with status = 0"])

    def breakpoint_options_language_test(self):
        """Test breakpoint command for language option."""
        exe = os.path.join(os.getcwd(), "a.out")
        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)

        # This should create a breakpoint with 1 locations.
        lldbutil.run_break_set_by_symbol(
            self,
            'ns::func',
            sym_exact=False,
            extra_options="-L c++",
            num_expected_locations=1)

        # This should create a breakpoint with 0 locations.
        lldbutil.run_break_set_by_symbol(
            self,
            'ns::func',
            sym_exact=False,
            extra_options="-L c",
            num_expected_locations=0)
        self.runCmd("settings set target.language c")
        lldbutil.run_break_set_by_symbol(
            self, 'ns::func', sym_exact=False, num_expected_locations=0)

        # Run the program.
        self.runCmd("run", RUN_SUCCEEDED)

        # Stopped once.
        self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT,
                    substrs=["stop reason = breakpoint 1."])

        # Continue the program, we should exit.
        self.runCmd("process continue")

        # We should exit.
        self.expect("process status", "Process exited successfully",
                    patterns=["^Process [0-9]+ exited with status = 0"])