199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest lldb breakpoint setting by source regular expression. 399451b44SJordan RupprechtThis test just tests the source file & function restrictions. 499451b44SJordan Rupprecht""" 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprechtclass TestSourceRegexBreakpoints(TestBase): 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht def test_location(self): 1699451b44SJordan Rupprecht self.build() 1799451b44SJordan Rupprecht self.source_regex_locations() 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht def test_restrictions(self): 2099451b44SJordan Rupprecht self.build() 2199451b44SJordan Rupprecht self.source_regex_restrictions() 2299451b44SJordan Rupprecht 2399451b44SJordan Rupprecht def source_regex_locations(self): 2499451b44SJordan Rupprecht """ Test that restricting source expressions to files & to functions. """ 2599451b44SJordan Rupprecht # Create a target by the debugger. 2699451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2799451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2899451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2999451b44SJordan Rupprecht 3099451b44SJordan Rupprecht # First look just in main: 3199451b44SJordan Rupprecht target_files = lldb.SBFileSpecList() 3299451b44SJordan Rupprecht target_files.Append(lldb.SBFileSpec("a.c")) 3399451b44SJordan Rupprecht 3499451b44SJordan Rupprecht func_names = lldb.SBStringList() 3599451b44SJordan Rupprecht func_names.AppendString("a_func") 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht source_regex = "Set . breakpoint here" 3899451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 3999451b44SJordan Rupprecht source_regex, lldb.SBFileSpecList(), target_files, func_names) 4099451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 41*0ed758b2SDave Lee self.assertEqual( 42*0ed758b2SDave Lee num_locations, 1, 4399451b44SJordan Rupprecht "a.c in a_func should give one breakpoint, got %d." % 4499451b44SJordan Rupprecht (num_locations)) 4599451b44SJordan Rupprecht 4699451b44SJordan Rupprecht loc = main_break.GetLocationAtIndex(0) 4799451b44SJordan Rupprecht self.assertTrue(loc.IsValid(), "Got a valid location.") 4899451b44SJordan Rupprecht address = loc.GetAddress() 4999451b44SJordan Rupprecht self.assertTrue( 5099451b44SJordan Rupprecht address.IsValid(), 5199451b44SJordan Rupprecht "Got a valid address from the location.") 5299451b44SJordan Rupprecht 5399451b44SJordan Rupprecht a_func_line = line_number("a.c", "Set A breakpoint here") 5499451b44SJordan Rupprecht line_entry = address.GetLineEntry() 5599451b44SJordan Rupprecht self.assertTrue(line_entry.IsValid(), "Got a valid line entry.") 56b3a0c4d7SRaphael Isemann self.assertEquals(line_entry.line, a_func_line, 5799451b44SJordan Rupprecht "Our line number matches the one lldbtest found.") 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht def source_regex_restrictions(self): 6099451b44SJordan Rupprecht """ Test that restricting source expressions to files & to functions. """ 6199451b44SJordan Rupprecht # Create a target by the debugger. 6299451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 6399451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 6499451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht # First look just in main: 6799451b44SJordan Rupprecht target_files = lldb.SBFileSpecList() 6899451b44SJordan Rupprecht target_files.Append(lldb.SBFileSpec("main.c")) 6999451b44SJordan Rupprecht source_regex = "Set . breakpoint here" 7099451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 7199451b44SJordan Rupprecht source_regex, lldb.SBFileSpecList(), target_files, lldb.SBStringList()) 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 74*0ed758b2SDave Lee self.assertEqual( 75*0ed758b2SDave Lee num_locations, 2, 7699451b44SJordan Rupprecht "main.c should have 2 matches, got %d." % 7799451b44SJordan Rupprecht (num_locations)) 7899451b44SJordan Rupprecht 7999451b44SJordan Rupprecht # Now look in both files: 8099451b44SJordan Rupprecht target_files.Append(lldb.SBFileSpec("a.c")) 8199451b44SJordan Rupprecht 8299451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 8399451b44SJordan Rupprecht source_regex, lldb.SBFileSpecList(), target_files, lldb.SBStringList()) 8499451b44SJordan Rupprecht 8599451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 86*0ed758b2SDave Lee self.assertEqual( 87*0ed758b2SDave Lee num_locations, 4, 8899451b44SJordan Rupprecht "main.c and a.c should have 4 matches, got %d." % 8999451b44SJordan Rupprecht (num_locations)) 9099451b44SJordan Rupprecht 9199451b44SJordan Rupprecht # Now restrict it to functions: 9299451b44SJordan Rupprecht func_names = lldb.SBStringList() 9399451b44SJordan Rupprecht func_names.AppendString("main_func") 9499451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 9599451b44SJordan Rupprecht source_regex, lldb.SBFileSpecList(), target_files, func_names) 9699451b44SJordan Rupprecht 9799451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 98*0ed758b2SDave Lee self.assertEqual( 99*0ed758b2SDave Lee num_locations, 2, 10099451b44SJordan Rupprecht "main_func in main.c and a.c should have 2 matches, got %d." % 10199451b44SJordan Rupprecht (num_locations)) 102