File indexing completed on 2026-05-10 08:42:56
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_TARGET_THREADPLANSTEPTHROUGH_H
0010 #define LLDB_TARGET_THREADPLANSTEPTHROUGH_H
0011
0012 #include "lldb/Target/Thread.h"
0013 #include "lldb/Target/ThreadPlan.h"
0014
0015 namespace lldb_private {
0016
0017 class ThreadPlanStepThrough : public ThreadPlan {
0018 public:
0019 ~ThreadPlanStepThrough() override;
0020
0021 void GetDescription(Stream *s, lldb::DescriptionLevel level) override;
0022 bool ValidatePlan(Stream *error) override;
0023 bool ShouldStop(Event *event_ptr) override;
0024 bool StopOthers() override;
0025 lldb::StateType GetPlanRunState() override;
0026 bool WillStop() override;
0027 bool MischiefManaged() override;
0028 void DidPush() override;
0029
0030 protected:
0031 bool DoPlanExplainsStop(Event *event_ptr) override;
0032 bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
0033
0034 ThreadPlanStepThrough(Thread &thread, StackID &return_stack_id,
0035 bool stop_others);
0036
0037 void LookForPlanToStepThroughFromCurrentPC();
0038
0039 bool HitOurBackstopBreakpoint();
0040
0041 private:
0042 friend lldb::ThreadPlanSP
0043 Thread::QueueThreadPlanForStepThrough(StackID &return_stack_id,
0044 bool abort_other_plans,
0045 bool stop_others, Status &status);
0046
0047 void ClearBackstopBreakpoint();
0048
0049 lldb::ThreadPlanSP m_sub_plan_sp;
0050 lldb::addr_t m_start_address;
0051 lldb::break_id_t m_backstop_bkpt_id;
0052 lldb::addr_t m_backstop_addr;
0053 StackID m_return_stack_id;
0054 bool m_stop_others;
0055
0056 ThreadPlanStepThrough(const ThreadPlanStepThrough &) = delete;
0057 const ThreadPlanStepThrough &
0058 operator=(const ThreadPlanStepThrough &) = delete;
0059 };
0060
0061 }
0062
0063 #endif