1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest that you can set breakpoint and hit the C++ language exception breakpoint 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 TestCPPExceptionBreakpoint (TestBase): 14*99451b44SJordan Rupprecht 15*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 16*99451b44SJordan Rupprecht my_var = 10 17*99451b44SJordan Rupprecht 18*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 19*99451b44SJordan Rupprecht @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24538") 20*99451b44SJordan Rupprecht @expectedFailureNetBSD 21*99451b44SJordan Rupprecht def test_cpp_exception_breakpoint(self): 22*99451b44SJordan Rupprecht """Test setting and hitting the C++ exception breakpoint.""" 23*99451b44SJordan Rupprecht self.build() 24*99451b44SJordan Rupprecht self.do_cpp_exception_bkpt() 25*99451b44SJordan Rupprecht 26*99451b44SJordan Rupprecht @add_test_categories(['pyapi']) 27*99451b44SJordan Rupprecht @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24538") 28*99451b44SJordan Rupprecht @expectedFailureNetBSD 29*99451b44SJordan Rupprecht def test_dummy_target_cpp_exception_breakpoint(self): 30*99451b44SJordan Rupprecht """Test setting and hitting the C++ exception breakpoint from dummy target.""" 31*99451b44SJordan Rupprecht self.build() 32*99451b44SJordan Rupprecht self.do_dummy_target_cpp_exception_bkpt() 33*99451b44SJordan Rupprecht 34*99451b44SJordan Rupprecht def setUp(self): 35*99451b44SJordan Rupprecht TestBase.setUp(self) 36*99451b44SJordan Rupprecht self.main_source = "main.c" 37*99451b44SJordan Rupprecht self.main_source_spec = lldb.SBFileSpec(self.main_source) 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht def do_cpp_exception_bkpt(self): 40*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 41*99451b44SJordan Rupprecht error = lldb.SBError() 42*99451b44SJordan Rupprecht 43*99451b44SJordan Rupprecht self.target = self.dbg.CreateTarget(exe) 44*99451b44SJordan Rupprecht self.assertTrue(self.target, VALID_TARGET) 45*99451b44SJordan Rupprecht 46*99451b44SJordan Rupprecht exception_bkpt = self.target.BreakpointCreateForException( 47*99451b44SJordan Rupprecht lldb.eLanguageTypeC_plus_plus, False, True) 48*99451b44SJordan Rupprecht self.assertTrue( 49*99451b44SJordan Rupprecht exception_bkpt.IsValid(), 50*99451b44SJordan Rupprecht "Created exception breakpoint.") 51*99451b44SJordan Rupprecht 52*99451b44SJordan Rupprecht process = self.target.LaunchSimple( 53*99451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 54*99451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 55*99451b44SJordan Rupprecht 56*99451b44SJordan Rupprecht thread_list = lldbutil.get_threads_stopped_at_breakpoint( 57*99451b44SJordan Rupprecht process, exception_bkpt) 58*99451b44SJordan Rupprecht self.assertTrue(len(thread_list) == 1, 59*99451b44SJordan Rupprecht "One thread stopped at the exception breakpoint.") 60*99451b44SJordan Rupprecht 61*99451b44SJordan Rupprecht def do_dummy_target_cpp_exception_bkpt(self): 62*99451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 63*99451b44SJordan Rupprecht error = lldb.SBError() 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht dummy_exception_bkpt = self.dbg.GetDummyTarget().BreakpointCreateForException( 66*99451b44SJordan Rupprecht lldb.eLanguageTypeC_plus_plus, False, True) 67*99451b44SJordan Rupprecht self.assertTrue( 68*99451b44SJordan Rupprecht dummy_exception_bkpt.IsValid(), 69*99451b44SJordan Rupprecht "Created exception breakpoint in dummy target.") 70*99451b44SJordan Rupprecht 71*99451b44SJordan Rupprecht self.target = self.dbg.CreateTarget(exe) 72*99451b44SJordan Rupprecht self.assertTrue(self.target, VALID_TARGET) 73*99451b44SJordan Rupprecht 74*99451b44SJordan Rupprecht exception_bkpt = self.target.GetBreakpointAtIndex(0) 75*99451b44SJordan Rupprecht self.assertTrue( 76*99451b44SJordan Rupprecht exception_bkpt.IsValid(), 77*99451b44SJordan Rupprecht "Target primed with exception breakpoint from dummy target.") 78*99451b44SJordan Rupprecht 79*99451b44SJordan Rupprecht process = self.target.LaunchSimple( 80*99451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 81*99451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 82*99451b44SJordan Rupprecht 83*99451b44SJordan Rupprecht thread_list = lldbutil.get_threads_stopped_at_breakpoint( 84*99451b44SJordan Rupprecht process, exception_bkpt) 85*99451b44SJordan Rupprecht self.assertTrue(len(thread_list) == 1, 86*99451b44SJordan Rupprecht "One thread stopped at the exception breakpoint.") 87