summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py
diff options
context:
space:
mode:
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.py35
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
OpenPOWER on IntegriCloud