//===-- Breakpoint.h --------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_BREAKPOINT_BREAKPOINT_H #define LLDB_BREAKPOINT_BREAKPOINT_H #include <memory> #include <string> #include <unordered_set> #include <vector> #include "lldb/Breakpoint/BreakpointID.h" #include "lldb/Breakpoint/BreakpointLocationCollection.h" #include "lldb/Breakpoint/BreakpointLocationList.h" #include "lldb/Breakpoint/BreakpointName.h" #include "lldb/Breakpoint/BreakpointOptions.h" #include "lldb/Breakpoint/Stoppoint.h" #include "lldb/Breakpoint/StoppointHitCounter.h" #include "lldb/Core/SearchFilter.h" #include "lldb/Target/Statistics.h" #include "lldb/Utility/Event.h" #include "lldb/Utility/StringList.h" #include "lldb/Utility/StructuredData.h" namespace lldb_private { /// \class Breakpoint Breakpoint.h "lldb/Breakpoint/Breakpoint.h" Class that /// manages logical breakpoint setting. /// General Outline: /// A breakpoint has four main parts, a filter, a resolver, the list of /// breakpoint /// locations that have been determined for the filter/resolver pair, and /// finally a set of options for the breakpoint. /// /// \b Filter: /// This is an object derived from SearchFilter. It manages the search for /// breakpoint location matches through the symbols in the module list of the /// target that owns it. It also filters out locations based on whatever /// logic it wants. /// /// \b Resolver: /// This is an object derived from BreakpointResolver. It provides a callback /// to the filter that will find breakpoint locations. How it does this is /// determined by what kind of resolver it is. /// /// The Breakpoint class also provides constructors for the common breakpoint /// cases which make the appropriate filter and resolver for you. /// /// \b Location List: /// This stores the breakpoint locations that have been determined to date. /// For a given breakpoint, there will be only one location with a given /// address. Adding a location at an already taken address will just return /// the location already at that address. Locations can be looked up by ID, /// or by address. /// /// \b Options: /// This includes: /// \b Enabled/Disabled /// \b Ignore Count /// \b Callback /// \b Condition /// Note, these options can be set on the breakpoint, and they can also be set /// on the individual locations. The options set on the breakpoint take /// precedence over the options set on the individual location. So for /// instance disabling the breakpoint will cause NONE of the locations to get /// hit. But if the breakpoint is enabled, then the location's enabled state /// will be checked to determine whether to insert that breakpoint location. /// Similarly, if the breakpoint condition says "stop", we won't check the /// location's condition. But if the breakpoint condition says "continue", /// then we will check the location for whether to actually stop or not. One /// subtle point worth observing here is that you don't actually stop at a /// Breakpoint, you always stop at one of its locations. So the "should stop" /// tests are done by the location, not by the breakpoint. class Breakpoint : public std::enable_shared_from_this<Breakpoint>, public Stoppoint { … }; } // namespace lldb_private #endif // LLDB_BREAKPOINT_BREAKPOINT_H