BreakpointResolverScripted.h revision 360784
1251881Speter//===-- BreakpointResolverScripted.h -----------------------------*- C++ -*-===// 2251881Speter// 3251881Speter// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4251881Speter// See https://llvm.org/LICENSE.txt for license information. 5251881Speter// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6251881Speter// 7251881Speter//===----------------------------------------------------------------------===// 8251881Speter 9251881Speter#ifndef liblldb_BreakpointResolverScripted_h_ 10251881Speter#define liblldb_BreakpointResolverScripted_h_ 11251881Speter 12251881Speter#include "lldb/lldb-forward.h" 13251881Speter#include "lldb/Breakpoint/BreakpointResolver.h" 14251881Speter#include "lldb/Core/ModuleSpec.h" 15251881Speter 16251881Speter 17251881Speternamespace lldb_private { 18251881Speter 19251881Speter/// \class BreakpointResolverScripted BreakpointResolverScripted.h 20251881Speter/// "lldb/Breakpoint/BreakpointResolverScripted.h" This class sets breakpoints 21251881Speter/// on a given Address. This breakpoint only takes once, and then it won't 22251881Speter/// attempt to reset itself. 23251881Speter 24251881Speterclass BreakpointResolverScripted : public BreakpointResolver { 25251881Speterpublic: 26251881Speter BreakpointResolverScripted(Breakpoint *bkpt, 27251881Speter const llvm::StringRef class_name, 28251881Speter lldb::SearchDepth depth, 29251881Speter StructuredDataImpl *args_data); 30251881Speter 31251881Speter ~BreakpointResolverScripted() override; 32251881Speter 33251881Speter static BreakpointResolver * 34251881Speter CreateFromStructuredData(Breakpoint *bkpt, 35251881Speter const StructuredData::Dictionary &options_dict, 36251881Speter Status &error); 37251881Speter 38251881Speter StructuredData::ObjectSP SerializeToStructuredData() override; 39251881Speter 40251881Speter Searcher::CallbackReturn SearchCallback(SearchFilter &filter, 41251881Speter SymbolContext &context, 42251881Speter Address *addr) override; 43251881Speter 44251881Speter lldb::SearchDepth GetDepth() override; 45251881Speter 46251881Speter void GetDescription(Stream *s) override; 47251881Speter 48251881Speter void Dump(Stream *s) const override; 49322442Speter 50251881Speter /// Methods for support type inquiry through isa, cast, and dyn_cast: 51251881Speter static inline bool classof(const BreakpointResolverScripted *) { return true; } 52251881Speter static inline bool classof(const BreakpointResolver *V) { 53251881Speter return V->getResolverID() == BreakpointResolver::PythonResolver; 54362181Sdim } 55257936Speter 56251881Speter lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override; 57251881Speter 58251881Speterprotected: 59251881Speter void NotifyBreakpointSet() override; 60251881Speterprivate: 61251881Speter void CreateImplementationIfNeeded(); 62251881Speter ScriptInterpreter *GetScriptInterpreter(); 63251881Speter 64251881Speter std::string m_class_name; 65251881Speter lldb::SearchDepth m_depth; 66251881Speter StructuredDataImpl *m_args_ptr; // We own this, but the implementation 67251881Speter // has to manage the UP (since that is 68251881Speter // how it gets stored in the 69251881Speter // SBStructuredData). 70251881Speter StructuredData::GenericSP m_implementation_sp; 71251881Speter 72251881Speter DISALLOW_COPY_AND_ASSIGN(BreakpointResolverScripted); 73251881Speter}; 74251881Speter 75251881Speter} // namespace lldb_private 76251881Speter 77251881Speter#endif // liblldb_BreakpointResolverScripted_h_ 78251881Speter