Home | History | Annotate | Download | only in Breakpoint
      1 //===-- BreakpointResolverName.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_BreakpointResolverName_h_
     11 #define liblldb_BreakpointResolverName_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 #include <vector>
     16 #include <string>
     17 // Other libraries and framework includes
     18 // Project includes
     19 #include "lldb/Breakpoint/BreakpointResolver.h"
     20 
     21 namespace lldb_private {
     22 
     23 //----------------------------------------------------------------------
     24 /// @class BreakpointResolverName BreakpointResolverName.h "lldb/Breakpoint/BreakpointResolverName.h"
     25 /// @brief This class sets breakpoints on a given function name, either by exact match
     26 /// or by regular expression.
     27 //----------------------------------------------------------------------
     28 
     29 class BreakpointResolverName:
     30     public BreakpointResolver
     31 {
     32 public:
     33 
     34     BreakpointResolverName (Breakpoint *bkpt,
     35                             const char *name,
     36                             uint32_t name_type_mask,
     37                             Breakpoint::MatchType type,
     38                             bool skip_prologue);
     39 
     40     // This one takes an array of names.  It is always MatchType = Exact.
     41     BreakpointResolverName (Breakpoint *bkpt,
     42                             const char *names[],
     43                             size_t num_names,
     44                             uint32_t name_type_mask,
     45                             bool skip_prologue);
     46 
     47     // This one takes a C++ array of names.  It is always MatchType = Exact.
     48     BreakpointResolverName (Breakpoint *bkpt,
     49                             std::vector<std::string> names,
     50                             uint32_t name_type_mask,
     51                             bool skip_prologue);
     52 
     53     // Creates a function breakpoint by regular expression.  Takes over control of the lifespan of func_regex.
     54     BreakpointResolverName (Breakpoint *bkpt,
     55                             RegularExpression &func_regex,
     56                             bool skip_prologue);
     57 
     58     BreakpointResolverName (Breakpoint *bkpt,
     59                             const char *class_name,
     60                             const char *method,
     61                             Breakpoint::MatchType type,
     62                             bool skip_prologue);
     63 
     64     virtual
     65     ~BreakpointResolverName ();
     66 
     67     virtual Searcher::CallbackReturn
     68     SearchCallback (SearchFilter &filter,
     69                     SymbolContext &context,
     70                     Address *addr,
     71                     bool containing);
     72 
     73     virtual Searcher::Depth
     74     GetDepth ();
     75 
     76     virtual void
     77     GetDescription (Stream *s);
     78 
     79     virtual void
     80     Dump (Stream *s) const;
     81 
     82     /// Methods for support type inquiry through isa, cast, and dyn_cast:
     83     static inline bool classof(const BreakpointResolverName *) { return true; }
     84     static inline bool classof(const BreakpointResolver *V) {
     85         return V->getResolverID() == BreakpointResolver::NameResolver;
     86     }
     87 
     88 protected:
     89     struct LookupInfo
     90     {
     91         ConstString name;
     92         ConstString lookup_name;
     93         uint32_t name_type_mask; // See FunctionNameType
     94         bool match_name_after_lookup;
     95 
     96         LookupInfo () :
     97             name(),
     98             lookup_name(),
     99             name_type_mask (0),
    100             match_name_after_lookup (false)
    101         {
    102         }
    103 
    104         void
    105         Prune (SymbolContextList &sc_list,
    106                size_t start_idx) const;
    107     };
    108     std::vector<LookupInfo> m_lookups;
    109     ConstString m_class_name;
    110     RegularExpression m_regex;
    111     Breakpoint::MatchType m_match_type;
    112     bool m_skip_prologue;
    113 
    114     void
    115     AddNameLookup (const ConstString &name, uint32_t name_type_mask);
    116 private:
    117     DISALLOW_COPY_AND_ASSIGN(BreakpointResolverName);
    118 };
    119 
    120 } // namespace lldb_private
    121 
    122 #endif  // liblldb_BreakpointResolverName_h_
    123