[Lldb-commits] [lldb] 0b0dca9 - [lldb] Fix exception breakpoint not being resolved when set on dummy target
Raphael Isemann via lldb-commits
lldb-commits at lists.llvm.org
Fri Nov 22 02:20:36 PST 2019
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() {
More information about the lldb-commits
mailing list