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(); } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits