BreakpointResolver.h revision d96df0a55f0a6e19af3d61d3f7ab5103ff96c543
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
26namespace 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
44class BreakpointResolver :
45   public Searcher
46{
47public:
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
136protected:
137    Breakpoint *m_breakpoint;  // This is the breakpoint we add locations to.
138
139private:
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