1""" 2Test breakpoint command for different options. 3""" 4 5 6 7import lldb 8from lldbsuite.test.lldbtest import * 9import lldbsuite.test.lldbutil as lldbutil 10 11 12class BreakpointOptionsTestCase(TestBase): 13 14 mydir = TestBase.compute_mydir(__file__) 15 16 def test(self): 17 """Test breakpoint command for different options.""" 18 self.build() 19 self.breakpoint_options_test() 20 21 def setUp(self): 22 # Call super's setUp(). 23 TestBase.setUp(self) 24 # Find the line number to break inside main(). 25 self.line = line_number('main.cpp', '// Set break point at this line.') 26 27 def breakpoint_options_test(self): 28 """Test breakpoint command for different options.""" 29 exe = self.getBuildArtifact("a.out") 30 self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 31 32 # This should create a breakpoint with 1 locations. 33 lldbutil.run_break_set_by_file_and_line( 34 self, 35 "main.cpp", 36 self.line, 37 extra_options="-K 1", 38 num_expected_locations=1) 39 lldbutil.run_break_set_by_file_and_line( 40 self, 41 "main.cpp", 42 self.line, 43 extra_options="-K 0", 44 num_expected_locations=1) 45 46 # Run the program. 47 self.runCmd("run", RUN_SUCCEEDED) 48 49 # Stopped once. 50 self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, 51 substrs=["stop reason = breakpoint 2."]) 52 53 # Check the list of breakpoint. 54 self.expect( 55 "breakpoint list -f", 56 "Breakpoint locations shown correctly", 57 substrs=[ 58 "1: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % 59 self.line, 60 "2: file = 'main.cpp', line = %d, exact_match = 0, locations = 1" % 61 self.line]) 62 63 # Continue the program, there should be another stop. 64 self.runCmd("process continue") 65 66 # Stopped again. 67 self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, 68 substrs=["stop reason = breakpoint 1."]) 69 70 # Continue the program, we should exit. 71 self.runCmd("process continue") 72 73 # We should exit. 74 self.expect("process status", "Process exited successfully", 75 patterns=["^Process [0-9]+ exited with status = 0"]) 76 77 def breakpoint_options_language_test(self): 78 """Test breakpoint command for language option.""" 79 exe = self.getBuildArtifact("a.out") 80 self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 81 82 # This should create a breakpoint with 1 locations. 83 lldbutil.run_break_set_by_symbol( 84 self, 85 'ns::func', 86 sym_exact=False, 87 extra_options="-L c++", 88 num_expected_locations=1) 89 90 # This should create a breakpoint with 0 locations. 91 lldbutil.run_break_set_by_symbol( 92 self, 93 'ns::func', 94 sym_exact=False, 95 extra_options="-L c", 96 num_expected_locations=0) 97 self.runCmd("settings set target.language c") 98 lldbutil.run_break_set_by_symbol( 99 self, 'ns::func', sym_exact=False, num_expected_locations=0) 100 101 # Run the program. 102 self.runCmd("run", RUN_SUCCEEDED) 103 104 # Stopped once. 105 self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, 106 substrs=["stop reason = breakpoint 1."]) 107 108 # Continue the program, we should exit. 109 self.runCmd("process continue") 110 111 # We should exit. 112 self.expect("process status", "Process exited successfully", 113 patterns=["^Process [0-9]+ exited with status = 0"]) 114