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/Breakpoint/BreakpointResolver.h" 13#include "lldb/Core/ModuleSpec.h" 14#include "lldb/Core/StructuredDataImpl.h" 15#include "lldb/lldb-forward.h" 16 17namespace 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 24class BreakpointResolverScripted : public BreakpointResolver { 25public: 26 BreakpointResolverScripted(const lldb::BreakpointSP &bkpt, 27 const llvm::StringRef class_name, 28 lldb::SearchDepth depth, 29 const 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: 51 static inline bool classof(const BreakpointResolverScripted *) { return true; } 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 59protected: 60 void NotifyBreakpointSet() override; 61private: 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; 68 StructuredData::GenericSP m_implementation_sp; 69 70 BreakpointResolverScripted(const BreakpointResolverScripted &) = delete; 71 const BreakpointResolverScripted & 72 operator=(const BreakpointResolverScripted &) = delete; 73}; 74 75} // namespace lldb_private 76 77#endif // LLDB_BREAKPOINT_BREAKPOINTRESOLVERSCRIPTED_H 78