BreakpointResolverName.h revision 296b06d325413723f5aac5988eed977b278a7807
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
21namespace 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
29class BreakpointResolverName:
30    public BreakpointResolver
31{
32public:
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
88protected:
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);
116private:
117    DISALLOW_COPY_AND_ASSIGN(BreakpointResolverName);
118};
119
120} // namespace lldb_private
121
122#endif  // liblldb_BreakpointResolverName_h_
123