Home | History | Annotate | Download | only in Breakpoint
      1 //===-- BreakpointResolver.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_BreakpointResolver_h_
     11 #define liblldb_BreakpointResolver_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 // Other libraries and framework includes
     16 // Project includes
     17 #include "lldb/lldb-private.h"
     18 #include "lldb/Core/Address.h"
     19 #include "lldb/Breakpoint/Breakpoint.h"
     20 #include "lldb/Breakpoint/BreakpointResolver.h"
     21 #include "lldb/Host/FileSpec.h"
     22 #include "lldb/Core/RegularExpression.h"
     23 #include "lldb/Core/SearchFilter.h"
     24 #include "lldb/Core/ConstString.h"
     25 
     26 namespace lldb_private {
     27 
     28 //----------------------------------------------------------------------
     29 /// @class BreakpointResolver BreakpointResolver.h "lldb/Breakpoint/BreakpointResolver.h"
     30 /// @brief This class works with SearchFilter to resolve logical breakpoints to their
     31 /// of concrete breakpoint locations.
     32 //----------------------------------------------------------------------
     33 
     34 //----------------------------------------------------------------------
     35 /// General Outline:
     36 /// The BreakpointResolver is a Searcher.  In that protocol,
     37 /// the SearchFilter asks the question "At what depth of the symbol context
     38 /// descent do you want your callback to get called?" of the filter.  The resolver
     39 /// answers this question (in the GetDepth method) and provides the resolution callback.
     40 /// Each Breakpoint has a BreakpointResolver, and it calls either ResolveBreakpoint
     41 /// or ResolveBreakpointInModules to tell it to look for new breakpoint locations.
     42 //----------------------------------------------------------------------
     43 
     44 class BreakpointResolver :
     45    public Searcher
     46 {
     47 public:
     48     //------------------------------------------------------------------
     49     /// The breakpoint resolver need to have a breakpoint for "ResolveBreakpoint
     50     /// to make sense.  It can be constructed without a breakpoint, but you have to
     51     /// call SetBreakpoint before ResolveBreakpoint.
     52     ///
     53     /// @param[in] bkpt
     54     ///   The breakpoint that owns this resolver.
     55     /// @param[in] resolverType
     56     ///   The concrete breakpoint resolver type for this breakpoint.
     57     ///
     58     /// @result
     59     ///   Returns breakpoint location id.
     60     //------------------------------------------------------------------
     61     BreakpointResolver (Breakpoint *bkpt, unsigned char resolverType);
     62 
     63     //------------------------------------------------------------------
     64     /// The Destructor is virtual, all significant breakpoint resolvers derive
     65     /// from this class.
     66     //------------------------------------------------------------------
     67     virtual
     68     ~BreakpointResolver ();
     69 
     70     //------------------------------------------------------------------
     71     /// This sets the breakpoint for this resolver.
     72     ///
     73     /// @param[in] bkpt
     74     ///   The breakpoint that owns this resolver.
     75     //------------------------------------------------------------------
     76     void
     77     SetBreakpoint (Breakpoint *bkpt);
     78 
     79     //------------------------------------------------------------------
     80     /// In response to this method the resolver scans all the modules in the breakpoint's
     81     /// target, and adds any new locations it finds.
     82     ///
     83     /// @param[in] filter
     84     ///   The filter that will manage the search for this resolver.
     85     //------------------------------------------------------------------
     86     virtual void
     87     ResolveBreakpoint (SearchFilter &filter);
     88 
     89     //------------------------------------------------------------------
     90     /// In response to this method the resolver scans the modules in the module list
     91     /// \a modules, and adds any new locations it finds.
     92     ///
     93     /// @param[in] filter
     94     ///   The filter that will manage the search for this resolver.
     95     //------------------------------------------------------------------
     96     virtual void
     97     ResolveBreakpointInModules (SearchFilter &filter,
     98                                 ModuleList &modules);
     99 
    100     //------------------------------------------------------------------
    101     /// Prints a canonical description for the breakpoint to the stream \a s.
    102     ///
    103     /// @param[in] s
    104     ///   Stream to which the output is copied.
    105     //------------------------------------------------------------------
    106     virtual void
    107     GetDescription (Stream *s) = 0;
    108 
    109     //------------------------------------------------------------------
    110     /// Standard "Dump" method.  At present it does nothing.
    111     //------------------------------------------------------------------
    112     virtual void
    113     Dump (Stream *s) const = 0;
    114 
    115     //------------------------------------------------------------------
    116     /// An enumeration for keeping track of the concrete subclass that
    117     /// is actually instantiated. Values of this enumeration are kept in the
    118     /// BreakpointResolver's SubclassID field. They are used for concrete type
    119     /// identification.
    120     enum ResolverTy {
    121         FileLineResolver, // This is an instance of BreakpointResolverFileLine
    122         AddressResolver,  // This is an instance of BreakpointResolverAddress
    123         NameResolver,      // This is an instance of BreakpointResolverName
    124         FileRegexResolver,
    125         ExceptionResolver
    126     };
    127 
    128     //------------------------------------------------------------------
    129     /// getResolverID - Return an ID for the concrete type of this object.  This
    130     /// is used to implement the LLVM classof checks.  This should not be used
    131     /// for any other purpose, as the values may change as LLDB evolves.
    132     unsigned getResolverID() const {
    133         return SubclassID;
    134     }
    135 
    136 protected:
    137     Breakpoint *m_breakpoint;  // This is the breakpoint we add locations to.
    138 
    139 private:
    140     // Subclass identifier (for llvm isa/dyn_cast)
    141     const unsigned char SubclassID;
    142     DISALLOW_COPY_AND_ASSIGN(BreakpointResolver);
    143 };
    144 
    145 } // namespace lldb_private
    146 
    147 #endif  // liblldb_BreakpointResolver_h_
    148