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 def test_location(self): 1599451b44SJordan Rupprecht self.build() 1699451b44SJordan Rupprecht self.source_regex_locations() 1799451b44SJordan Rupprecht 1899451b44SJordan Rupprecht def test_restrictions(self): 1999451b44SJordan Rupprecht self.build() 2099451b44SJordan Rupprecht self.source_regex_restrictions() 2199451b44SJordan Rupprecht 2299451b44SJordan Rupprecht def source_regex_locations(self): 2399451b44SJordan Rupprecht """Test that restricting source expressions to files & to functions.""" 2499451b44SJordan Rupprecht # Create a target by the debugger. 2599451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2699451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2799451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2899451b44SJordan Rupprecht 2999451b44SJordan Rupprecht # First look just in main: 3099451b44SJordan Rupprecht target_files = lldb.SBFileSpecList() 3199451b44SJordan Rupprecht target_files.Append(lldb.SBFileSpec("a.c")) 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht func_names = lldb.SBStringList() 3499451b44SJordan Rupprecht func_names.AppendString("a_func") 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht source_regex = "Set . breakpoint here" 3799451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 382238dcc3SJonas Devlieghere source_regex, lldb.SBFileSpecList(), target_files, func_names 392238dcc3SJonas Devlieghere ) 4099451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 410ed758b2SDave Lee self.assertEqual( 422238dcc3SJonas Devlieghere num_locations, 432238dcc3SJonas Devlieghere 1, 442238dcc3SJonas Devlieghere "a.c in a_func should give one breakpoint, got %d." % (num_locations), 452238dcc3SJonas Devlieghere ) 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht loc = main_break.GetLocationAtIndex(0) 4899451b44SJordan Rupprecht self.assertTrue(loc.IsValid(), "Got a valid location.") 4999451b44SJordan Rupprecht address = loc.GetAddress() 502238dcc3SJonas Devlieghere self.assertTrue(address.IsValid(), "Got a valid address from the location.") 5199451b44SJordan Rupprecht 5299451b44SJordan Rupprecht a_func_line = line_number("a.c", "Set A breakpoint here") 5399451b44SJordan Rupprecht line_entry = address.GetLineEntry() 5499451b44SJordan Rupprecht self.assertTrue(line_entry.IsValid(), "Got a valid line entry.") 55*80fcecb1SJonas Devlieghere self.assertEqual( 562238dcc3SJonas Devlieghere line_entry.line, 572238dcc3SJonas Devlieghere a_func_line, 582238dcc3SJonas Devlieghere "Our line number matches the one lldbtest found.", 592238dcc3SJonas Devlieghere ) 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht def source_regex_restrictions(self): 6299451b44SJordan Rupprecht """Test that restricting source expressions to files & to functions.""" 6399451b44SJordan Rupprecht # Create a target by the debugger. 6499451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 6599451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 6699451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 6799451b44SJordan Rupprecht 6899451b44SJordan Rupprecht # First look just in main: 6999451b44SJordan Rupprecht target_files = lldb.SBFileSpecList() 7099451b44SJordan Rupprecht target_files.Append(lldb.SBFileSpec("main.c")) 7199451b44SJordan Rupprecht source_regex = "Set . breakpoint here" 7299451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 732238dcc3SJonas Devlieghere source_regex, lldb.SBFileSpecList(), target_files, lldb.SBStringList() 742238dcc3SJonas Devlieghere ) 7599451b44SJordan Rupprecht 7699451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 770ed758b2SDave Lee self.assertEqual( 782238dcc3SJonas Devlieghere num_locations, 2, "main.c should have 2 matches, got %d." % (num_locations) 792238dcc3SJonas Devlieghere ) 8099451b44SJordan Rupprecht 8199451b44SJordan Rupprecht # Now look in both files: 8299451b44SJordan Rupprecht target_files.Append(lldb.SBFileSpec("a.c")) 8399451b44SJordan Rupprecht 8499451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 852238dcc3SJonas Devlieghere source_regex, lldb.SBFileSpecList(), target_files, lldb.SBStringList() 862238dcc3SJonas Devlieghere ) 8799451b44SJordan Rupprecht 8899451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 890ed758b2SDave Lee self.assertEqual( 902238dcc3SJonas Devlieghere num_locations, 912238dcc3SJonas Devlieghere 4, 922238dcc3SJonas Devlieghere "main.c and a.c should have 4 matches, got %d." % (num_locations), 932238dcc3SJonas Devlieghere ) 9499451b44SJordan Rupprecht 9599451b44SJordan Rupprecht # Now restrict it to functions: 9699451b44SJordan Rupprecht func_names = lldb.SBStringList() 9799451b44SJordan Rupprecht func_names.AppendString("main_func") 9899451b44SJordan Rupprecht main_break = target.BreakpointCreateBySourceRegex( 992238dcc3SJonas Devlieghere source_regex, lldb.SBFileSpecList(), target_files, func_names 1002238dcc3SJonas Devlieghere ) 10199451b44SJordan Rupprecht 10299451b44SJordan Rupprecht num_locations = main_break.GetNumLocations() 1030ed758b2SDave Lee self.assertEqual( 1042238dcc3SJonas Devlieghere num_locations, 1052238dcc3SJonas Devlieghere 2, 1062238dcc3SJonas Devlieghere "main_func in main.c and a.c should have 2 matches, got %d." 1072238dcc3SJonas Devlieghere % (num_locations), 1082238dcc3SJonas Devlieghere ) 109