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 liblldb_BreakpointResolverScripted_h_ 10 #define liblldb_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(Breakpoint *bkpt, 27 const llvm::StringRef class_name, 28 lldb::SearchDepth depth, 29 StructuredDataImpl *args_data); 30 31 ~BreakpointResolverScripted() override; 32 33 static BreakpointResolver * 34 CreateFromStructuredData(Breakpoint *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 CopyForBreakpoint(Breakpoint &breakpoint) override; 57 58 protected: 59 void NotifyBreakpointSet() override; 60 private: 61 void CreateImplementationIfNeeded(); 62 ScriptInterpreter *GetScriptInterpreter(); 63 64 std::string m_class_name; 65 lldb::SearchDepth m_depth; 66 StructuredDataImpl *m_args_ptr; // We own this, but the implementation 67 // has to manage the UP (since that is 68 // how it gets stored in the 69 // SBStructuredData). 70 StructuredData::GenericSP m_implementation_sp; 71 72 DISALLOW_COPY_AND_ASSIGN(BreakpointResolverScripted); 73 }; 74 75 } // namespace lldb_private 76 77 #endif // liblldb_BreakpointResolverScripted_h_ 78