1//===-- ThreadPlanShouldStopHere.h ------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef liblldb_ThreadPlanShouldStopHere_h_ 11#define liblldb_ThreadPlanShouldStopHere_h_ 12 13// C Includes 14// C++ Includes 15// Other libraries and framework includes 16// Project includes 17#include "lldb/Target/ThreadPlan.h" 18 19namespace lldb_private { 20 21// This is an interface that ThreadPlans can adopt to allow flexible modifications of the behavior 22// when a thread plan comes to a place where it would ordinarily stop. If such modification makes 23// sense for your plan, inherit from this class, and when you would be about to stop (in your ShouldStop 24// method), call InvokeShouldStopHereCallback, and if that returns a non-NULL plan, execute that 25// plan instead of stopping. 26// 27// The classic example of the use of this is ThreadPlanStepInRange not stopping in frames that have 28// no debug information. 29// 30// This class also defines a set of flags to control general aspects of this "ShouldStop" behavior. 31// A class implementing this protocol needs to define a default set of flags, and can provide access to 32// changing that default flag set if it wishes. 33 34class ThreadPlanShouldStopHere 35{ 36public: 37 enum 38 { 39 eNone = 0, 40 eAvoidInlines = (1 << 0), 41 eAvoidNoDebug = (1 << 1) 42 }; 43 44 //------------------------------------------------------------------ 45 // Constructors and Destructors 46 //------------------------------------------------------------------ 47 ThreadPlanShouldStopHere (ThreadPlan *owner, 48 ThreadPlanShouldStopHereCallback callback = NULL, 49 void *baton = NULL); 50 virtual 51 ~ThreadPlanShouldStopHere(); 52 53 void 54 SetShouldStopHereCallback (ThreadPlanShouldStopHereCallback callback, void *baton); 55 56 lldb::ThreadPlanSP 57 InvokeShouldStopHereCallback (); 58 59 lldb_private::Flags & 60 GetFlags () 61 { 62 return m_flags; 63 } 64 65 const lldb_private::Flags & 66 GetFlags () const 67 { 68 return m_flags; 69 } 70 71protected: 72 // Implement this, and call it in the plan's constructor to set the default flags. 73 virtual void SetFlagsToDefault () = 0; 74 75 //------------------------------------------------------------------ 76 // Classes that inherit from ThreadPlanShouldStopHere can see and modify these 77 //------------------------------------------------------------------ 78 ThreadPlanShouldStopHereCallback m_callback; 79 void * m_baton; 80 ThreadPlan *m_owner; 81 lldb_private::Flags m_flags; 82 83private: 84 //------------------------------------------------------------------ 85 // For ThreadPlanShouldStopHere only 86 //------------------------------------------------------------------ 87 88 DISALLOW_COPY_AND_ASSIGN (ThreadPlanShouldStopHere); 89 90}; 91 92} // namespace lldb_private 93 94#endif // liblldb_ThreadPlanShouldStopHere_h_ 95