diff options
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py index 1383a03f464..f93559af736 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py @@ -35,3 +35,38 @@ class StepScripted(StepWithChild): def queue_child_thread_plan(self): return self.thread_plan.QueueThreadPlanForStepScripted("Steps.StepOut") + +# This plan does a step-over until a variable changes value. +class StepUntil(StepWithChild): + def __init__(self, thread_plan, dict): + self.frame = thread_plan.GetThread().frames[0] + self.target = thread_plan.GetThread().GetProcess().GetTarget() + self.value = self.frame.FindVariable("foo") + StepWithChild.__init__(self, thread_plan) + + def queue_child_thread_plan(self): + le = self.frame.GetLineEntry() + start_addr = le.GetStartAddress() + start = start_addr.GetLoadAddress(self.target) + end = le.GetEndAddress().GetLoadAddress(self.target) + print("Stepping from 0x%x to 0x%x (0x%x)"%(start, end, end - start)) + return self.thread_plan.QueueThreadPlanForStepOverRange(start_addr, + end - start) + + def should_stop(self, event): + if not self.child_thread_plan.IsPlanComplete(): + return False + + # If we've stepped out of this frame, stop. + if not self.frame.IsValid(): + return True + + if not self.value.IsValid(): + return True + + print("Got next value: %d"%(self.value.GetValueAsUnsigned())) + if not self.value.GetValueDidChange(): + self.child_thread_plan = self.queue_child_thread_plan() + return False + else: + return True |