Reapply 8d024a79ea w/o the extra bits.

This commit is contained in:
Jim Ingham 2023-03-20 16:11:00 -07:00
parent 9b655c2627
commit 2c7abc83f6
3 changed files with 44 additions and 33 deletions

View File

@ -831,6 +831,11 @@ protected:
= std::static_pointer_cast<StopInfoWatchpoint>(shared_from_this());
ThreadPlanSP step_over_wp_sp(new ThreadPlanStepOverWatchpoint(
*(thread_sp.get()), me_as_siwp_sp, wp_sp));
// When this plan is done we want to stop, so set this as a Controlling
// plan.
step_over_wp_sp->SetIsControllingPlan(true);
step_over_wp_sp->SetOkayToDiscard(false);
Status error;
error = thread_sp->QueueThreadPlan(step_over_wp_sp, false);
// If we couldn't push the thread plan, just stop here:

View File

@ -11,36 +11,11 @@ from lldbsuite.test import lldbutil
class TestStepOverWatchpoint(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@expectedFailureAll(
oslist=["freebsd", "linux"],
archs=[
'aarch64',
'arm'],
bugnumber="llvm.org/pr26031")
# Read-write watchpoints not supported on SystemZ
@expectedFailureAll(archs=['s390x'])
@expectedFailureAll(
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
archs=['aarch64', 'arm'],
bugnumber="<rdar://problem/34027183>")
@add_test_categories(["basic_process"])
def test(self):
def get_to_start(self, bkpt_text):
"""Test stepping over watchpoints."""
self.build()
target = self.createTestTarget()
lldbutil.run_break_set_by_symbol(self, 'main')
process = target.LaunchSimple(None, None,
self.get_process_working_directory())
self.assertTrue(process.IsValid(), PROCESS_IS_VALID)
self.assertState(process.GetState(), lldb.eStateStopped,
PROCESS_STOPPED)
thread = lldbutil.get_stopped_thread(process,
lldb.eStopReasonBreakpoint)
self.assertTrue(thread.IsValid(), "Failed to get thread.")
target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(self, bkpt_text,
lldb.SBFileSpec("main.c"))
frame = thread.GetFrameAtIndex(0)
self.assertTrue(frame.IsValid(), "Failed to get frame.")
@ -55,14 +30,45 @@ class TestStepOverWatchpoint(TestBase):
self.assertSuccess(error, "Error while setting watchpoint")
self.assertTrue(read_watchpoint, "Failed to set read watchpoint.")
# Disable the breakpoint we hit so we don't muddy the waters with
# stepping off from the breakpoint:
bkpt.SetEnabled(False)
return (target, process, thread, read_watchpoint)
@expectedFailureAll(
oslist=["freebsd", "linux"],
archs=[
'aarch64',
'arm'],
bugnumber="llvm.org/pr26031")
# Read-write watchpoints not supported on SystemZ
@expectedFailureAll(archs=['s390x'])
@add_test_categories(["basic_process"])
def test_step_over(self):
target, process, thread, wp = self.get_to_start("Set a breakpoint here")
thread.StepOver()
self.assertStopReason(thread.GetStopReason(), lldb.eStopReasonWatchpoint,
STOPPED_DUE_TO_WATCHPOINT)
self.assertEquals(thread.GetStopDescription(20), 'watchpoint 1')
process.Continue()
self.assertState(process.GetState(), lldb.eStateStopped,
PROCESS_STOPPED)
@expectedFailureAll(
oslist=["freebsd", "linux"],
archs=[
'aarch64',
'arm'],
bugnumber="llvm.org/pr26031")
# Read-write watchpoints not supported on SystemZ
@expectedFailureAll(archs=['s390x'])
@expectedFailureAll(
oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"],
archs=['aarch64', 'arm'],
bugnumber="<rdar://problem/34027183>")
@add_test_categories(["basic_process"])
def test_step_instruction(self):
target, process, thread, wp = self.get_to_start("Set breakpoint after call")
self.assertEquals(thread.GetStopDescription(20), 'step over')
self.step_inst_for_watchpoint(1)

View File

@ -11,8 +11,8 @@ void watch_write() {
}
int main() {
watch_read();
g_temp = g_watch_me_read;
watch_read(); // Set a breakpoint here
g_temp = g_watch_me_read; // Set breakpoint after call
watch_write();
g_watch_me_write = g_temp;
return 0;