poya created this revision.
poya added a reviewer: jingham.
Herald added subscribers: lldb-commits, JDevlieghere.
Herald added a project: LLDB.

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.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D69880

Files:
  
lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
  lldb/source/Target/LanguageRuntime.cpp


Index: lldb/source/Target/LanguageRuntime.cpp
===================================================================
--- lldb/source/Target/LanguageRuntime.cpp
+++ lldb/source/Target/LanguageRuntime.cpp
@@ -155,8 +155,10 @@
 
 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() {
Index: 
lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
===================================================================
--- 
lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
+++ 
lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
@@ -24,6 +24,14 @@
         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 @@
             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.")


Index: lldb/source/Target/LanguageRuntime.cpp
===================================================================
--- lldb/source/Target/LanguageRuntime.cpp
+++ lldb/source/Target/LanguageRuntime.cpp
@@ -155,8 +155,10 @@
 
 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() {
Index: lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
===================================================================
--- lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
+++ lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp_exception/TestCPPExceptionBreakpoint.py
@@ -24,6 +24,14 @@
         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 @@
             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.")
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to