Author: Martin Svensson Date: 2019-11-22T11:20:09+01:00 New Revision: 0b0dca9f6fe34333abdb437bd1d3d92c8362a2e6
URL: https://github.com/llvm/llvm-project/commit/0b0dca9f6fe34333abdb437bd1d3d92c8362a2e6 DIFF: https://github.com/llvm/llvm-project/commit/0b0dca9f6fe34333abdb437bd1d3d92c8362a2e6.diff LOG: [lldb] Fix exception breakpoint not being resolved when set on dummy target Summary: Ensure that breakpoint ivar is properly set in exception breakpoint resolver so that exception breakpoints set on dummy targets are resolved once real targets are created and run. Reviewers: jingham Reviewed By: jingham Subscribers: teemperor, JDevlieghere, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D69880 Added: Modified: lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py lldb/source/Target/LanguageRuntime.cpp Removed: ################################################################################ diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py b/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py index e8a1b81a8394..839a47041ae8 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py @@ -24,6 +24,14 @@ def test_cpp_exception_breakpoint(self): self.build() self.do_cpp_exception_bkpt() + @add_test_categories(['pyapi']) + @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24538") + @expectedFailureNetBSD + def test_dummy_target_cpp_exception_breakpoint(self): + """Test setting and hitting the C++ exception breakpoint from dummy target.""" + self.build() + self.do_dummy_target_cpp_exception_bkpt() + def setUp(self): TestBase.setUp(self) self.main_source = "main.c" @@ -50,3 +58,30 @@ def do_cpp_exception_bkpt(self): process, exception_bkpt) self.assertTrue(len(thread_list) == 1, "One thread stopped at the exception breakpoint.") + + def do_dummy_target_cpp_exception_bkpt(self): + exe = self.getBuildArtifact("a.out") + error = lldb.SBError() + + dummy_exception_bkpt = self.dbg.GetDummyTarget().BreakpointCreateForException( + lldb.eLanguageTypeC_plus_plus, False, True) + self.assertTrue( + dummy_exception_bkpt.IsValid(), + "Created exception breakpoint in dummy target.") + + self.target = self.dbg.CreateTarget(exe) + self.assertTrue(self.target, VALID_TARGET) + + exception_bkpt = self.target.GetBreakpointAtIndex(0) + self.assertTrue( + exception_bkpt.IsValid(), + "Target primed with exception breakpoint from dummy target.") + + process = self.target.LaunchSimple( + None, None, self.get_process_working_directory()) + self.assertTrue(process, PROCESS_IS_VALID) + + thread_list = lldbutil.get_threads_stopped_at_breakpoint( + process, exception_bkpt) + self.assertTrue(len(thread_list) == 1, + "One thread stopped at the exception breakpoint.") diff --git a/lldb/source/Target/LanguageRuntime.cpp b/lldb/source/Target/LanguageRuntime.cpp index 999ac99e93c3..32dd805a00b1 100644 --- a/lldb/source/Target/LanguageRuntime.cpp +++ b/lldb/source/Target/LanguageRuntime.cpp @@ -155,8 +155,10 @@ class ExceptionBreakpointResolver : public BreakpointResolver { protected: BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override { - return BreakpointResolverSP( + BreakpointResolverSP ret_sp( new ExceptionBreakpointResolver(m_language, m_catch_bp, m_throw_bp)); + ret_sp->SetBreakpoint(&breakpoint); + return ret_sp; } bool SetActualResolver() { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits