File indexing completed on 2026-05-10 08:42:56
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_TARGET_THREADPLANSTEPUNTIL_H
0010 #define LLDB_TARGET_THREADPLANSTEPUNTIL_H
0011
0012 #include "lldb/Target/Thread.h"
0013 #include "lldb/Target/ThreadPlan.h"
0014
0015 namespace lldb_private {
0016
0017 class ThreadPlanStepUntil : public ThreadPlan {
0018 public:
0019 ~ThreadPlanStepUntil() 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
0029 protected:
0030 bool DoWillResume(lldb::StateType resume_state, bool current_plan) override;
0031 bool DoPlanExplainsStop(Event *event_ptr) override;
0032
0033 ThreadPlanStepUntil(Thread &thread, lldb::addr_t *address_list,
0034 size_t num_addresses, bool stop_others,
0035 uint32_t frame_idx = 0);
0036
0037 void AnalyzeStop();
0038
0039 private:
0040 StackID m_stack_id;
0041 lldb::addr_t m_step_from_insn;
0042 lldb::break_id_t m_return_bp_id;
0043 lldb::addr_t m_return_addr;
0044 bool m_stepped_out;
0045 bool m_should_stop;
0046 bool m_ran_analyze;
0047 bool m_explains_stop;
0048
0049 typedef std::map<lldb::addr_t, lldb::break_id_t> until_collection;
0050 until_collection m_until_points;
0051 bool m_stop_others;
0052
0053 void Clear();
0054
0055 friend lldb::ThreadPlanSP Thread::QueueThreadPlanForStepUntil(
0056 bool abort_other_plans, lldb::addr_t *address_list, size_t num_addresses,
0057 bool stop_others, uint32_t frame_idx, Status &status);
0058
0059
0060
0061
0062 ThreadPlanStepUntil(const ThreadPlanStepUntil &) = delete;
0063 const ThreadPlanStepUntil &operator=(const ThreadPlanStepUntil &) = delete;
0064 };
0065
0066 }
0067
0068 #endif