blob: 980bb4693d033ffcd8447830c1aca86578ee27e2 [file] [log] [blame]
Andrew Walbran3d2c1972020-04-07 12:24:26 +01001//===-- 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
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(Breakpoint *bkpt,
27 const llvm::StringRef class_name,
28 lldb::SearchDepth depth,
29 StructuredDataImpl *args_data,
30 ScriptInterpreter &script_interp);
31
32 ~BreakpointResolverScripted() override;
33
34 static BreakpointResolver *
35 CreateFromStructuredData(Breakpoint *bkpt,
36 const StructuredData::Dictionary &options_dict,
37 Status &error);
38
39 StructuredData::ObjectSP SerializeToStructuredData() override;
40
41 Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
42 SymbolContext &context, Address *addr,
43 bool containing) override;
44
45 lldb::SearchDepth GetDepth() override;
46
47 void GetDescription(Stream *s) override;
48
49 void Dump(Stream *s) const override;
50
51 /// Methods for support type inquiry through isa, cast, and dyn_cast:
52 static inline bool classof(const BreakpointResolverScripted *) { return true; }
53 static inline bool classof(const BreakpointResolver *V) {
54 return V->getResolverID() == BreakpointResolver::PythonResolver;
55 }
56
57 lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
58
59protected:
60 void NotifyBreakpointSet() override;
61private:
62 void CreateImplementationIfNeeded();
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 DISALLOW_COPY_AND_ASSIGN(BreakpointResolverScripted);
74};
75
76} // namespace lldb_private
77
78#endif // liblldb_BreakpointResolverScripted_h_