summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py35
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py44
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c5
3 files changed, 74 insertions, 10 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
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py
index ce5f33f0bc9..cadadde9677 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py
@@ -12,23 +12,23 @@ class StepScriptedTestCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
+ def setUp(self):
+ TestBase.setUp(self)
+ self.main_source_file = lldb.SBFileSpec("main.c")
+ self.runCmd("command script import Steps.py")
+
def test_standard_step_out(self):
- """Tests stepping with the scripted thread plan laying over a standard thread plan for stepping out."""
+ """Tests stepping with the scripted thread plan laying over a standard
+ thread plan for stepping out."""
self.build()
- self.main_source_file = lldb.SBFileSpec("main.c")
self.step_out_with_scripted_plan("Steps.StepOut")
def test_scripted_step_out(self):
- """Tests stepping with the scripted thread plan laying over an another scripted thread plan for stepping out."""
+ """Tests stepping with the scripted thread plan laying over an another
+ scripted thread plan for stepping out."""
self.build()
- self.main_source_file = lldb.SBFileSpec("main.c")
self.step_out_with_scripted_plan("Steps.StepScripted")
- def setUp(self):
- TestBase.setUp(self)
- self.main_source_file = lldb.SBFileSpec("main.c")
- self.runCmd("command script import Steps.py")
-
def step_out_with_scripted_plan(self, name):
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
"Set a breakpoint here",
@@ -43,6 +43,7 @@ class StepScriptedTestCase(TestBase):
frame = thread.GetFrameAtIndex(0)
self.assertEqual("main", frame.GetFunctionName())
+
def test_misspelled_plan_name(self):
"""Test that we get a useful error if we misspell the plan class name"""
self.build()
@@ -60,3 +61,28 @@ class StepScriptedTestCase(TestBase):
# Make sure we didn't let the process run:
self.assertEqual(stop_id, process.GetStopID(), "Process didn't run")
+
+ def test_checking_variable(self):
+ """Test that we can call SBValue API's from a scripted thread plan"""
+ self.build()
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ "Set a breakpoint here",
+ self.main_source_file)
+
+ frame = thread.GetFrameAtIndex(0)
+ self.assertEqual("foo", frame.GetFunctionName())
+ foo_val = frame.FindVariable("foo")
+ self.assertTrue(foo_val.GetError().Success(), "Got the foo variable")
+ self.assertEqual(foo_val.GetValueAsUnsigned(), 10, "foo starts at 10")
+
+ err = thread.StepUsingScriptedThreadPlan("Steps.StepUntil")
+ self.assertTrue(err.Success(), err.GetCString())
+
+ # We should not have exited:
+ self.assertEqual(process.GetState(), lldb.eStateStopped, "We are stopped")
+
+ # We should still be in foo:
+ self.assertEqual("foo", frame.GetFunctionName())
+
+ # And foo should have changed:
+ self.assertTrue(foo_val.GetValueDidChange(), "Foo changed")
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c
index 88b3c17125d..bfd8a35d556 100644
--- a/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c
@@ -1,7 +1,10 @@
#include <stdio.h>
void foo() {
- printf("Set a breakpoint here.\n");
+ int foo = 10;
+ printf("%d\n", foo); // Set a breakpoint here.
+ foo = 20;
+ printf("%d\n", foo);
}
int main() {
OpenPOWER on IntegriCloud