Author: aleksandr.urakov Date: Thu Oct 25 01:27:42 2018 New Revision: 345247
URL: http://llvm.org/viewvc/llvm-project?rev=345247&view=rev Log: [API] Extend the `SBThreadPlan` interface Summary: This patch extends the `SBThreadPlan` to allow retrieving of thread plans for scripted steps. Reviewers: labath, zturner, jingham Reviewed By: jingham Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D53361 Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/ lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Makefile lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c Modified: lldb/trunk/include/lldb/API/SBThreadPlan.h lldb/trunk/scripts/interface/SBThreadPlan.i lldb/trunk/source/API/SBThreadPlan.cpp Modified: lldb/trunk/include/lldb/API/SBThreadPlan.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBThreadPlan.h?rev=345247&r1=345246&r2=345247&view=diff ============================================================================== --- lldb/trunk/include/lldb/API/SBThreadPlan.h (original) +++ lldb/trunk/include/lldb/API/SBThreadPlan.h Thu Oct 25 01:27:42 2018 @@ -88,6 +88,8 @@ public: SBThreadPlan QueueThreadPlanForRunToAddress(SBAddress address); + SBThreadPlan QueueThreadPlanForStepScripted(const char *script_class_name); + #ifndef SWIG lldb_private::ThreadPlan *get(); #endif Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Makefile URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Makefile?rev=345247&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Makefile (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Makefile Thu Oct 25 01:27:42 2018 @@ -0,0 +1,5 @@ +LEVEL = ../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py?rev=345247&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/Steps.py Thu Oct 25 01:27:42 2018 @@ -0,0 +1,37 @@ +import lldb + +class StepWithChild: + def __init__(self, thread_plan): + self.thread_plan = thread_plan + self.child_thread_plan = self.queue_child_thread_plan() + + def explains_stop(self, event): + return False + + def should_stop(self, event): + if not self.child_thread_plan.IsPlanComplete(): + return False + + self.thread_plan.SetPlanComplete(True) + + return True + + def should_step(self): + return False + + def queue_child_thread_plan(self): + return None + +class StepOut(StepWithChild): + def __init__(self, thread_plan, dict): + StepWithChild.__init__(self, thread_plan) + + def queue_child_thread_plan(self): + return self.thread_plan.QueueThreadPlanForStepOut(0) + +class StepScripted(StepWithChild): + def __init__(self, thread_plan, dict): + StepWithChild.__init__(self, thread_plan) + + def queue_child_thread_plan(self): + return self.thread_plan.QueueThreadPlanForStepScripted("Steps.StepOut") Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py?rev=345247&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/TestStepScripted.py Thu Oct 25 01:27:42 2018 @@ -0,0 +1,41 @@ +""" +Tests stepping with scripted thread plans. +""" + +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + +class StepScriptedTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + NO_DEBUG_INFO_TESTCASE = True + + def test_standard_step_out(self): + """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.""" + 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.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", self.main_source_file) + + frame = thread.GetFrameAtIndex(0) + self.assertEqual("foo", frame.GetFunctionName()) + + err = thread.StepUsingScriptedThreadPlan(name) + self.assertTrue(err.Success(), "Failed to step out") + + frame = thread.GetFrameAtIndex(0) + self.assertEqual("main", frame.GetFunctionName()) Added: lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c?rev=345247&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c (added) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/step_scripted/main.c Thu Oct 25 01:27:42 2018 @@ -0,0 +1,10 @@ +#include <stdio.h> + +void foo() { + printf("Set a breakpoint here.\n"); +} + +int main() { + foo(); + return 0; +} Modified: lldb/trunk/scripts/interface/SBThreadPlan.i URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBThreadPlan.i?rev=345247&r1=345246&r2=345247&view=diff ============================================================================== --- lldb/trunk/scripts/interface/SBThreadPlan.i (original) +++ lldb/trunk/scripts/interface/SBThreadPlan.i Thu Oct 25 01:27:42 2018 @@ -106,6 +106,9 @@ public: SBThreadPlan QueueThreadPlanForRunToAddress (SBAddress address); + SBThreadPlan + QueueThreadPlanForStepScripted(const char *script_class_name); + protected: friend class SBBreakpoint; Modified: lldb/trunk/source/API/SBThreadPlan.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBThreadPlan.cpp?rev=345247&r1=345246&r2=345247&view=diff ============================================================================== --- lldb/trunk/source/API/SBThreadPlan.cpp (original) +++ lldb/trunk/source/API/SBThreadPlan.cpp Thu Oct 25 01:27:42 2018 @@ -207,3 +207,13 @@ SBThreadPlan::QueueThreadPlanForRunToAdd return SBThreadPlan(); } } + +SBThreadPlan +SBThreadPlan::QueueThreadPlanForStepScripted(const char *script_class_name) { + if (m_opaque_sp) { + return SBThreadPlan(m_opaque_sp->GetThread().QueueThreadPlanForStepScripted( + false, script_class_name, false)); + } else { + return SBThreadPlan(); + } +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits