1 //===-- BreakpointResolverScripted.h -----------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_BREAKPOINT_BREAKPOINTRESOLVERSCRIPTED_H 10 #define LLDB_BREAKPOINT_BREAKPOINTRESOLVERSCRIPTED_H 11 12 #include "lldb/lldb-forward.h" 13 #include "lldb/Breakpoint/BreakpointResolver.h" 14 #include "lldb/Core/ModuleSpec.h" 15 16 17 namespace lldb_private { 18 19 /// \class BreakpointResolverScripted BreakpointResolverScripted.h 20 /// "lldb/Breakpoint/BreakpointResolverScripted.h" This class sets breakpoints 21 /// on a given Address. This breakpoint only takes once, and then it won't 22 /// attempt to reset itself. 23 24 class BreakpointResolverScripted : public BreakpointResolver { 25 public: 26 BreakpointResolverScripted(const lldb::BreakpointSP &bkpt, 27 const llvm::StringRef class_name, 28 lldb::SearchDepth depth, 29 StructuredDataImpl *args_data); 30 31 ~BreakpointResolverScripted() override = default; 32 33 static BreakpointResolver * 34 CreateFromStructuredData(const lldb::BreakpointSP &bkpt, 35 const StructuredData::Dictionary &options_dict, 36 Status &error); 37 38 StructuredData::ObjectSP SerializeToStructuredData() override; 39 40 Searcher::CallbackReturn SearchCallback(SearchFilter &filter, 41 SymbolContext &context, 42 Address *addr) override; 43 44 lldb::SearchDepth GetDepth() override; 45 46 void GetDescription(Stream *s) override; 47 48 void Dump(Stream *s) const override; 49 50 /// Methods for support type inquiry through isa, cast, and dyn_cast: classof(const BreakpointResolverScripted *)51 static inline bool classof(const BreakpointResolverScripted *) { return true; } classof(const BreakpointResolver * V)52 static inline bool classof(const BreakpointResolver *V) { 53 return V->getResolverID() == BreakpointResolver::PythonResolver; 54 } 55 56 lldb::BreakpointResolverSP 57 CopyForBreakpoint(lldb::BreakpointSP &breakpoint) override; 58 59 protected: 60 void NotifyBreakpointSet() override; 61 private: 62 void CreateImplementationIfNeeded(lldb::BreakpointSP bkpt); 63 ScriptInterpreter *GetScriptInterpreter(); 64 65 std::string m_class_name; 66 lldb::SearchDepth m_depth; 67 StructuredDataImpl *m_args_ptr; // We own this, but the implementation 68 // has to manage the UP (since that is 69 // how it gets stored in the 70 // SBStructuredData). 71 StructuredData::GenericSP m_implementation_sp; 72 73 BreakpointResolverScripted(const BreakpointResolverScripted &) = delete; 74 const BreakpointResolverScripted & 75 operator=(const BreakpointResolverScripted &) = delete; 76 }; 77 78 } // namespace lldb_private 79 80 #endif // LLDB_BREAKPOINT_BREAKPOINTRESOLVERSCRIPTED_H 81