[Lldb-commits] [lldb] r325958 - Fix breakpoint thread name conditionals after breakpoint options refactor.

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Fri Feb 23 13:10:42 PST 2018


Author: jingham
Date: Fri Feb 23 13:10:42 2018
New Revision: 325958

URL: http://llvm.org/viewvc/llvm-project?rev=325958&view=rev
Log:
Fix breakpoint thread name conditionals after breakpoint options refactor.

PR36435

Modified:
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/TestThreadSpecificBreakpoint.py
    lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/main.cpp
    lldb/trunk/source/Breakpoint/BreakpointOptions.cpp

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/TestThreadSpecificBreakpoint.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/TestThreadSpecificBreakpoint.py?rev=325958&r1=325957&r2=325958&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/TestThreadSpecificBreakpoint.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/TestThreadSpecificBreakpoint.py Fri Feb 23 13:10:42 2018
@@ -13,68 +13,57 @@ from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test import lldbutil
 
+def set_thread_id(thread, breakpoint):
+    id = thread.id
+    breakpoint.SetThreadID(id)
+
+def set_thread_name(thread, breakpoint):
+    breakpoint.SetThreadName("main-thread")
 
 class ThreadSpecificBreakTestCase(TestBase):
 
     mydir = TestBase.compute_mydir(__file__)
+    NO_DEBUG_INFO_TESTCASE = True
 
     @add_test_categories(['pyapi'])
+
     @expectedFailureAll(oslist=["windows"])
     @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], archs=['armv7', 'armv7k'], bugnumber='rdar://problem/34563920') # armv7 ios problem - breakpoint with tid qualifier isn't working
-    def test_python(self):
+    def test_thread_id(self):
+        self.do_test(set_thread_id)
+
+    @skipUnlessDarwin
+    @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], archs=['armv7', 'armv7k'], bugnumber='rdar://problem/34563920') # armv7 ios problem - breakpoint with tid qualifier isn't working
+    def test_thread_name(self):
+        self.do_test(set_thread_name)
+
+    def do_test(self, setter_method):
         """Test that we obey thread conditioned breakpoints."""
         self.build()
-        exe = self.getBuildArtifact("a.out")
+        main_source_spec = lldb.SBFileSpec("main.cpp")
+        (target, process, main_thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(self,
+                "Set main breakpoint here", main_source_spec)
 
-        target = self.dbg.CreateTarget(exe)
-        self.assertTrue(target, VALID_TARGET)
+        main_thread_id = main_thread.GetThreadID()
 
         # This test works by setting a breakpoint in a function conditioned to stop only on
         # the main thread, and then calling this function on a secondary thread, joining,
         # and then calling again on the main thread.  If the thread specific breakpoint works
         # then it should not be hit on the secondary thread, only on the main
         # thread.
-
-        main_source_spec = lldb.SBFileSpec("main.cpp")
-
-        main_breakpoint = target.BreakpointCreateBySourceRegex(
-            "Set main breakpoint here", main_source_spec)
         thread_breakpoint = target.BreakpointCreateBySourceRegex(
             "Set thread-specific breakpoint here", main_source_spec)
-
-        self.assertTrue(
-            main_breakpoint.IsValid(),
-            "Failed to set main breakpoint.")
-        self.assertGreater(
-            main_breakpoint.GetNumLocations(),
-            0,
-            "main breakpoint has no locations associated with it.")
-        self.assertTrue(
-            thread_breakpoint.IsValid(),
-            "Failed to set thread breakpoint.")
         self.assertGreater(
             thread_breakpoint.GetNumLocations(),
             0,
             "thread breakpoint has no locations associated with it.")
 
-        process = target.LaunchSimple(
-            None, None, self.get_process_working_directory())
-
-        self.assertTrue(process, PROCESS_IS_VALID)
-
-        stopped_threads = lldbutil.get_threads_stopped_at_breakpoint(
-            process, main_breakpoint)
-        self.assertEqual(
-            len(stopped_threads),
-            1,
-            "main breakpoint stopped at unexpected number of threads")
-        main_thread = stopped_threads[0]
-        main_thread_id = main_thread.GetThreadID()
-
         # Set the thread-specific breakpoint to only stop on the main thread.  The run the function
         # on another thread and join on it.  If the thread-specific breakpoint works, the next
         # stop should be on the main thread.
-        thread_breakpoint.SetThreadID(main_thread_id)
+
+        main_thread_id = main_thread.GetThreadID()
+        setter_method(main_thread, thread_breakpoint)
 
         process.Continue()
         next_stop_state = process.GetState()

Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/main.cpp?rev=325958&r1=325957&r2=325958&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/main.cpp (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/thread/thread_specific_break/main.cpp Fri Feb 23 13:10:42 2018
@@ -12,6 +12,11 @@ int
 main ()
 {
     // Set main breakpoint here.
+
+    #ifdef __APPLE__
+    pthread_setname_np("main-thread");
+    #endif
+
     std::thread t(thread_function);
     t.join();
 

Modified: lldb/trunk/source/Breakpoint/BreakpointOptions.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointOptions.cpp?rev=325958&r1=325957&r2=325958&view=diff
==============================================================================
--- lldb/trunk/source/Breakpoint/BreakpointOptions.cpp (original)
+++ lldb/trunk/source/Breakpoint/BreakpointOptions.cpp Fri Feb 23 13:10:42 2018
@@ -470,12 +470,18 @@ const Baton *BreakpointOptions::GetBaton
 bool BreakpointOptions::InvokeCallback(StoppointCallbackContext *context,
                                        lldb::user_id_t break_id,
                                        lldb::user_id_t break_loc_id) {
-  if (m_callback && context->is_synchronous == IsCallbackSynchronous()) {
-    return m_callback(m_callback_baton_sp ? m_callback_baton_sp->data()
+  if (m_callback) {
+    if (context->is_synchronous == IsCallbackSynchronous()) {
+        return m_callback(m_callback_baton_sp ? m_callback_baton_sp->data()
                                           : nullptr,
                       context, break_id, break_loc_id);
-  } else
-    return true;
+    } else if (IsCallbackSynchronous()) {
+      // If a synchronous callback is called at async time, it should not say
+      // to stop.
+      return false;
+    }
+  }
+  return true;
 }
 
 bool BreakpointOptions::HasCallback() const {
@@ -526,7 +532,10 @@ const ThreadSpec *BreakpointOptions::Get
 
 ThreadSpec *BreakpointOptions::GetThreadSpec() {
   if (m_thread_spec_ap.get() == nullptr)
+  {
+    m_set_flags.Set(eThreadSpec);
     m_thread_spec_ap.reset(new ThreadSpec());
+  }
 
   return m_thread_spec_ap.get();
 }




More information about the lldb-commits mailing list