1 //===-- BreakpointResolverFileLine.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_BREAKPOINTRESOLVERFILELINE_H 10 #define LLDB_BREAKPOINT_BREAKPOINTRESOLVERFILELINE_H 11 12 #include "lldb/Breakpoint/BreakpointResolver.h" 13 #include "lldb/Core/SourceLocationSpec.h" 14 #include <optional> 15 16 namespace lldb_private { 17 18 /// \class BreakpointResolverFileLine BreakpointResolverFileLine.h 19 /// "lldb/Breakpoint/BreakpointResolverFileLine.h" This class sets breakpoints 20 /// by file and line. Optionally, it will look for inlined instances of the 21 /// file and line specification. 22 23 class BreakpointResolverFileLine : public BreakpointResolver { 24 public: 25 BreakpointResolverFileLine( 26 const lldb::BreakpointSP &bkpt, lldb::addr_t offset, bool skip_prologue, 27 const SourceLocationSpec &location_spec, 28 std::optional<llvm::StringRef> removed_prefix_opt = std::nullopt); 29 30 static lldb::BreakpointResolverSP 31 CreateFromStructuredData(const StructuredData::Dictionary &data_dict, 32 Status &error); 33 34 StructuredData::ObjectSP SerializeToStructuredData() override; 35 36 ~BreakpointResolverFileLine() override = default; 37 38 Searcher::CallbackReturn SearchCallback(SearchFilter &filter, 39 SymbolContext &context, 40 Address *addr) override; 41 42 lldb::SearchDepth GetDepth() override; 43 44 void GetDescription(Stream *s) override; 45 46 void Dump(Stream *s) const override; 47 48 /// Methods for support type inquiry through isa, cast, and dyn_cast: 49 static inline bool classof(const BreakpointResolverFileLine *) { 50 return true; 51 } 52 static inline bool classof(const BreakpointResolver *V) { 53 return V->getResolverID() == BreakpointResolver::FileLineResolver; 54 } 55 56 lldb::BreakpointResolverSP 57 CopyForBreakpoint(lldb::BreakpointSP &breakpoint) override; 58 59 protected: 60 void FilterContexts(SymbolContextList &sc_list); 61 void DeduceSourceMapping(const SymbolContextList &sc_list); 62 63 friend class Breakpoint; 64 SourceLocationSpec m_location_spec; 65 bool m_skip_prologue; 66 // Any previously removed file path prefix by reverse source mapping. 67 // This is used to auto deduce source map if needed. 68 std::optional<llvm::StringRef> m_removed_prefix_opt; 69 70 private: 71 BreakpointResolverFileLine(const BreakpointResolverFileLine &) = delete; 72 const BreakpointResolverFileLine & 73 operator=(const BreakpointResolverFileLine &) = delete; 74 }; 75 76 } // namespace lldb_private 77 78 #endif // LLDB_BREAKPOINT_BREAKPOINTRESOLVERFILELINE_H 79