summaryrefslogtreecommitdiff
path: root/examples/python/scripted_step.py
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2016-07-23 20:50:09 +0000
committerDimitry Andric <dim@FreeBSD.org>2016-07-23 20:50:09 +0000
commitf3fbd1c0586ff6ec7895991e6c28f61a503c36a8 (patch)
tree48d008fd3df8c0e73271a4b18474e0aac6dbfe33 /examples/python/scripted_step.py
parent2fc5d2d1dfaf623ce4e24cd8590565902f8c557c (diff)
Notes
Diffstat (limited to 'examples/python/scripted_step.py')
-rw-r--r--examples/python/scripted_step.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/examples/python/scripted_step.py b/examples/python/scripted_step.py
index 8affb9e83220..6be397188720 100644
--- a/examples/python/scripted_step.py
+++ b/examples/python/scripted_step.py
@@ -184,3 +184,28 @@ class StepCheckingCondition:
def should_step (self):
return True
+# Here's an example that steps out of the current frame, gathers some information
+# and then continues. The information in this case is rax. Currently the thread
+# plans are not a safe place to call lldb command-line commands, so the information
+# is gathered through SB API calls.
+
+class FinishPrintAndContinue:
+ def __init__ (self, thread_plan, dict):
+ self.thread_plan = thread_plan
+ self.step_out_thread_plan = thread_plan.QueueThreadPlanForStepOut(0, True)
+ self.thread = self.thread_plan.GetThread()
+
+ def explains_stop (self, event):
+ return False
+
+ def should_stop (self, event):
+ if self.step_out_thread_plan.IsPlanComplete():
+ frame_0 = self.thread.frames[0]
+ rax_value = frame_0.FindRegister("rax")
+ if rax_value.GetError().Success():
+ print "RAX on exit: ", rax_value.GetValue()
+ else:
+ print "Couldn't get rax value:", rax_value.GetError().GetCString()
+
+ self.thread_plan.SetPlanComplete(True)
+ return False