Add a setting to force stepping to always run all threads.
Also allow ScriptedThreadPlans to set & get their StopOthers state. <rdar://problem/64229484> Differential Revision: https://reviews.llvm.org/D85265
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
"""
|
||||
Tests stepping with scripted thread plans.
|
||||
"""
|
||||
|
||||
import threading
|
||||
import lldb
|
||||
import lldbsuite.test.lldbutil as lldbutil
|
||||
from lldbsuite.test.decorators import *
|
||||
@@ -111,3 +111,58 @@ class StepScriptedTestCase(TestBase):
|
||||
|
||||
# And foo should have changed:
|
||||
self.assertTrue(foo_val.GetValueDidChange(), "Foo changed")
|
||||
|
||||
def test_stop_others_from_command(self):
|
||||
"""Test that the stop-others flag is set correctly by the command line.
|
||||
Also test that the run-all-threads property overrides this."""
|
||||
self.do_test_stop_others()
|
||||
|
||||
def run_step(self, stop_others_value, run_mode, token):
|
||||
import Steps
|
||||
interp = self.dbg.GetCommandInterpreter()
|
||||
result = lldb.SBCommandReturnObject()
|
||||
|
||||
cmd = "thread step-scripted -C Steps.StepReportsStopOthers -k token -v %s"%(token)
|
||||
if run_mode != None:
|
||||
cmd = cmd + " --run-mode %s"%(run_mode)
|
||||
print(cmd)
|
||||
interp.HandleCommand(cmd, result)
|
||||
self.assertTrue(result.Succeeded(), "Step scripted failed: %s."%(result.GetError()))
|
||||
print(Steps.StepReportsStopOthers.stop_mode_dict)
|
||||
value = Steps.StepReportsStopOthers.stop_mode_dict[token]
|
||||
self.assertEqual(value, stop_others_value, "Stop others has the correct value.")
|
||||
|
||||
def do_test_stop_others(self):
|
||||
self.build()
|
||||
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
|
||||
"Set a breakpoint here",
|
||||
self.main_source_file)
|
||||
# First run with stop others false and see that we got that.
|
||||
thread_id = ""
|
||||
if sys.version_info.major == 2:
|
||||
thread_id = str(threading._get_ident())
|
||||
else:
|
||||
thread_id = str(threading.get_ident())
|
||||
|
||||
# all-threads should set stop others to False.
|
||||
self.run_step(False, "all-threads", thread_id)
|
||||
|
||||
# this-thread should set stop others to True
|
||||
self.run_step(True, "this-thread", thread_id)
|
||||
|
||||
# The default value should be stop others:
|
||||
self.run_step(True, None, thread_id)
|
||||
|
||||
# The target.process.run-all-threads should override this:
|
||||
interp = self.dbg.GetCommandInterpreter()
|
||||
result = lldb.SBCommandReturnObject()
|
||||
|
||||
interp.HandleCommand("settings set target.process.run-all-threads true", result)
|
||||
self.assertTrue(result.Succeeded, "setting run-all-threads works.")
|
||||
|
||||
self.run_step(False, None, thread_id)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user