1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest lldb breakpoint command for CPP methods & functions in a namespace. 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprechtimport lldb 8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprechtclass CPPBreakpointCommandsTestCase(TestBase): 14*99451b44SJordan Rupprecht 15*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht def make_breakpoint(self, name, type, expected_num_locations): 18*99451b44SJordan Rupprecht bkpt = self.target.BreakpointCreateByName(name, 19*99451b44SJordan Rupprecht type, 20*99451b44SJordan Rupprecht self.a_out_module, 21*99451b44SJordan Rupprecht self.nested_comp_unit) 22*99451b44SJordan Rupprecht num_locations = bkpt.GetNumLocations() 23*99451b44SJordan Rupprecht self.assertTrue( 24*99451b44SJordan Rupprecht num_locations == expected_num_locations, 25*99451b44SJordan Rupprecht "Wrong number of locations for '%s', expected: %d got: %d" % 26*99451b44SJordan Rupprecht (name, 27*99451b44SJordan Rupprecht expected_num_locations, 28*99451b44SJordan Rupprecht num_locations)) 29*99451b44SJordan Rupprecht return bkpt 30*99451b44SJordan Rupprecht 31*99451b44SJordan Rupprecht def test_cpp_breakpoint_cmds(self): 32*99451b44SJordan Rupprecht """Test a sequence of breakpoint command add, list, and delete.""" 33*99451b44SJordan Rupprecht self.build() 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 36*99451b44SJordan Rupprecht 37*99451b44SJordan Rupprecht # Create a target from the debugger. 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht self.target = self.dbg.CreateTarget(exe) 40*99451b44SJordan Rupprecht self.assertTrue(self.target, VALID_TARGET) 41*99451b44SJordan Rupprecht 42*99451b44SJordan Rupprecht self.a_out_module = lldb.SBFileSpecList() 43*99451b44SJordan Rupprecht self.a_out_module.Append(lldb.SBFileSpec(exe)) 44*99451b44SJordan Rupprecht 45*99451b44SJordan Rupprecht self.nested_comp_unit = lldb.SBFileSpecList() 46*99451b44SJordan Rupprecht self.nested_comp_unit.Append(lldb.SBFileSpec("nested.cpp")) 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht # First provide ONLY the method name. This should get everybody... 49*99451b44SJordan Rupprecht self.make_breakpoint("Function", 50*99451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 51*99451b44SJordan Rupprecht 5) 52*99451b44SJordan Rupprecht 53*99451b44SJordan Rupprecht # Now add the Baz class specifier. This should get the version contained in Bar, 54*99451b44SJordan Rupprecht # AND the one contained in :: 55*99451b44SJordan Rupprecht self.make_breakpoint("Baz::Function", 56*99451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 57*99451b44SJordan Rupprecht 2) 58*99451b44SJordan Rupprecht 59*99451b44SJordan Rupprecht # Then add the Bar::Baz specifier. This should get the version 60*99451b44SJordan Rupprecht # contained in Bar only 61*99451b44SJordan Rupprecht self.make_breakpoint("Bar::Baz::Function", 62*99451b44SJordan Rupprecht lldb.eFunctionNameTypeAuto, 63*99451b44SJordan Rupprecht 1) 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht self.make_breakpoint("Function", 66*99451b44SJordan Rupprecht lldb.eFunctionNameTypeMethod, 67*99451b44SJordan Rupprecht 3) 68*99451b44SJordan Rupprecht 69*99451b44SJordan Rupprecht self.make_breakpoint("Baz::Function", 70*99451b44SJordan Rupprecht lldb.eFunctionNameTypeMethod, 71*99451b44SJordan Rupprecht 2) 72*99451b44SJordan Rupprecht 73*99451b44SJordan Rupprecht self.make_breakpoint("Bar::Baz::Function", 74*99451b44SJordan Rupprecht lldb.eFunctionNameTypeMethod, 75*99451b44SJordan Rupprecht 1) 76*99451b44SJordan Rupprecht 77*99451b44SJordan Rupprecht self.make_breakpoint("Function", 78*99451b44SJordan Rupprecht lldb.eFunctionNameTypeBase, 79*99451b44SJordan Rupprecht 2) 80*99451b44SJordan Rupprecht 81*99451b44SJordan Rupprecht self.make_breakpoint("Bar::Function", 82*99451b44SJordan Rupprecht lldb.eFunctionNameTypeBase, 83*99451b44SJordan Rupprecht 1) 84