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