124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Breakpoint.h --------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_Breakpoint_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Breakpoint_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointLocationList.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointOptions.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/BreakpointLocationCollection.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Breakpoint/Stoppoint.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/SearchFilter.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Event.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StringList.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class Breakpoint Breakpoint.h "lldb/Breakpoint/Breakpoint.h" 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief Class that manages logical breakpoint setting. 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// General Outline: 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// A breakpoint has four main parts, a filter, a resolver, the list of breakpoint 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// locations that have been determined for the filter/resolver pair, and finally 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// a set of options for the breakpoint. 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Filter: 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// This is an object derived from SearchFilter. It manages the search 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// for breakpoint location matches through the symbols in the module list of the target 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// that owns it. It also filters out locations based on whatever logic it wants. 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Resolver: 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// This is an object derived from BreakpointResolver. It provides a 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// callback to the filter that will find breakpoint locations. How it does this is 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// determined by what kind of resolver it is. 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The Breakpoint class also provides constructors for the common breakpoint cases 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// which make the appropriate filter and resolver for you. 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Location List: 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// This stores the breakpoint locations that have been determined 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// to date. For a given breakpoint, there will be only one location with a given 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// address. Adding a location at an already taken address will just return the location 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// already at that address. Locations can be looked up by ID, or by address. 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Options: 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// This includes: 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Enabled/Disabled 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Ignore Count 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Callback 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// \b Condition 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Note, these options can be set on the breakpoint, and they can also be set on the 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// individual locations. The options set on the breakpoint take precedence over the 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// options set on the individual location. 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// So for instance disabling the breakpoint will cause NONE of the locations to get hit. 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// But if the breakpoint is enabled, then the location's enabled state will be checked 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// to determine whether to insert that breakpoint location. 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// Similarly, if the breakpoint condition says "stop", we won't check the location's condition. 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// But if the breakpoint condition says "continue", then we will check the location for whether 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// to actually stop or not. 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// One subtle point worth observing here is that you don't actually stop at a Breakpoint, you 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// always stop at one of its locations. So the "should stop" tests are done by the location, 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// not by the breakpoint. 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Breakpoint: 77102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<Breakpoint>, 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public Stoppoint 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const ConstString & 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetEventIdentifier (); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An enum specifying the match style for breakpoint settings. At 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// present only used for function name style breakpoints. 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef enum 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Exact, 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Regexp, 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Glob 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } MatchType; 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class BreakpointEventData : 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public EventData 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public: 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static const ConstString & 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavorString (); 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual const ConstString & 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFlavor () const; 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 108c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton BreakpointEventData (lldb::BreakpointEventType sub_type, 10928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham const lldb::BreakpointSP &new_breakpoint_sp); 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~BreakpointEventData(); 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 114c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton lldb::BreakpointEventType 115c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton GetBreakpointEventType () const; 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointSP & 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpoint (); 11928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 12028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham BreakpointLocationCollection & 12128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetBreakpointLocationCollection() 12228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham { 12328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham return m_locations; 12428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham } 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual void 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s) const; 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 130c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton static lldb::BreakpointEventType 131c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton GetBreakpointEventTypeFromEvent (const lldb::EventSP &event_sp); 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static lldb::BreakpointSP 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBreakpointFromEvent (const lldb::EventSP &event_sp); 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 136c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton static lldb::BreakpointLocationSP 137c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton GetBreakpointLocationAtIndexFromEvent (const lldb::EventSP &event_sp, uint32_t loc_idx); 13828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 13936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton static size_t 14028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetNumBreakpointLocationsFromEvent (const lldb::EventSP &event_sp); 14128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 14228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham static const BreakpointEventData * 14328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetEventDataFromEvent (const Event *event_sp); 144c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner private: 146c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 147c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton lldb::BreakpointEventType m_breakpoint_event; 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointSP m_new_breakpoint_sp; 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointLocationCollection m_locations; 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (BreakpointEventData); 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor. 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor is not virtual since there should be no reason to subclass 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// breakpoints. The varieties of breakpoints are specified instead by 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// providing different resolvers & filters. 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~Breakpoint(); 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Methods 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tell whether this breakpoint is an "internal" breakpoint. 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns \b true if this is an internal breakpoint, \b false otherwise. 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsInternal () const; 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Standard "Dump" method. At present it does nothing. 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump (Stream *s); 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next set of methods provide ways to tell the breakpoint to update 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // it's location list - usually done when modules appear or disappear. 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tell this breakpoint to clear all its breakpoint sites. Done 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the process holding the breakpoint sites is destroyed. 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearAllBreakpointSites (); 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tell this breakpoint to scan it's target's module list and resolve any 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// new locations that match the breakpoint's specifications. 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ResolveBreakpoint (); 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Tell this breakpoint to scan a given module list and resolve any 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// new locations that match the breakpoint's specifications. 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20603e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// @param[in] changed_modules 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The list of modules to look in for new locations. 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 21003e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham ResolveBreakpointInModules (ModuleList &changed_modules); 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Like ResolveBreakpointInModules, but allows for "unload" events, in 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// which case we will remove any locations that are in modules that got 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// unloaded. 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] changedModules 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The list of modules to look in for new locations. 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] load_event 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \b true then the modules were loaded, if \b false, unloaded. 22203e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// @param[in] delete_locations 22303e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// If \b true then the modules were unloaded delete any locations in the changed modules. 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 22603e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham ModulesChanged (ModuleList &changed_modules, 22703e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham bool load_event, 22803e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham bool delete_locations = false); 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23203e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// Tells the breakpoint the old module \a old_module_sp has been 23303e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// replaced by new_module_sp (usually because the underlying file has been 23403e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// rebuilt, and the old version is gone.) 23503e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// 23603e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// @param[in] old_module_sp 23703e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// The old module that is going away. 23803e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// @param[in] new_module_sp 23903e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham /// The new module that is replacing it. 24003e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham //------------------------------------------------------------------ 24103e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham void 24203e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham ModuleReplaced (lldb::ModuleSP old_module_sp, lldb::ModuleSP new_module_sp); 24303e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham 24403e5e512252fc7971430027d8ea05f64576bcbb3Jim Ingham //------------------------------------------------------------------ 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next set of methods provide access to the breakpoint locations 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // for this breakpoint. 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Add a location to the breakpoint's location list. This is only meant 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// to be called by the breakpoint's resolver. FIXME: how do I ensure that? 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] addr 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Address specifying the new location. 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] new_location 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set to \b true if a new location was created, to \b false if there 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// already was a location at this Address. 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a pointer to the new location. 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointLocationSP 26219a1ab8a1e0c9c66adaa648b5cf5909dac2d667eGreg Clayton AddLocation (const Address &addr, 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool *new_location = NULL); 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a breakpoint location by Address. 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] addr 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Address specifying the location. 27024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the location at \a addr. The pointer 27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the shared pointer will be NULL if there is no location at that address. 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointLocationSP 27519a1ab8a1e0c9c66adaa648b5cf5909dac2d667eGreg Clayton FindLocationByAddress (const Address &addr); 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a breakpoint location ID by Address. 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] addr 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The Address specifying the location. 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns the UID of the location at \a addr, or \b LLDB_INVALID_ID if 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// there is no breakpoint location at that address. 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::break_id_t 28719a1ab8a1e0c9c66adaa648b5cf5909dac2d667eGreg Clayton FindLocationIDByAddress (const Address &addr); 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Find a breakpoint location for a given breakpoint location ID. 29124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] bp_loc_id 29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The ID specifying the location. 29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 29524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the location with ID \a bp_loc_id. The pointer 29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// in the shared pointer will be NULL if there is no location with that ID. 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointLocationSP 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner FindLocationByID (lldb::break_id_t bp_loc_id); 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get breakpoint locations by index. 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] index 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The location index. 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns a shared pointer to the location with index \a 30924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// index. The shared pointer might contain NULL if \a index is 31024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// greater than then number of actual locations. 31124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointLocationSP 31336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton GetLocationAtIndex (size_t index); 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next section deals with various breakpoint options. 31724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If \a enable is \b true, enable the breakpoint, if \b false disable it. 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetEnabled (bool enable); 32424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Check the Enable/Disable state. 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if the breakpoint is enabled, \b false if disabled. 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsEnabled (); 33224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the breakpoint to ignore the next \a count breakpoint hits. 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] count 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of breakpoint hits to ignore. 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 33954e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton SetIgnoreCount (uint32_t count); 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 342c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton /// Return the current ignore count/ 34324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 34424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number of breakpoint hits to be ignored. 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 34654e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton uint32_t 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIgnoreCount () const; 348fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 350c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton /// Return the current hit count for all locations. 351c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton /// @return 352c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton /// The current hit count for all locations. 353c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton //------------------------------------------------------------------ 354c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton uint32_t 355c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton GetHitCount () const; 356c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 357c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton 358c7f5d5c3a3b48869f5ad2a3cdc4b20ca40929ba3Greg Clayton //------------------------------------------------------------------ 3592753a024a5a314232baa579c0ada87551aa86988Jim Ingham /// If \a one_shot is \b true, breakpoint will be deleted on first hit. 3602753a024a5a314232baa579c0ada87551aa86988Jim Ingham //------------------------------------------------------------------ 3612753a024a5a314232baa579c0ada87551aa86988Jim Ingham void 3622753a024a5a314232baa579c0ada87551aa86988Jim Ingham SetOneShot (bool one_shot); 3632753a024a5a314232baa579c0ada87551aa86988Jim Ingham 3642753a024a5a314232baa579c0ada87551aa86988Jim Ingham //------------------------------------------------------------------ 3652753a024a5a314232baa579c0ada87551aa86988Jim Ingham /// Check the OneShot state. 3662753a024a5a314232baa579c0ada87551aa86988Jim Ingham /// @return 3672753a024a5a314232baa579c0ada87551aa86988Jim Ingham /// \b true if the breakpoint is one shot, \b false otherwise. 3682753a024a5a314232baa579c0ada87551aa86988Jim Ingham //------------------------------------------------------------------ 3692753a024a5a314232baa579c0ada87551aa86988Jim Ingham bool 3702753a024a5a314232baa579c0ada87551aa86988Jim Ingham IsOneShot () const; 3712753a024a5a314232baa579c0ada87551aa86988Jim Ingham 3722753a024a5a314232baa579c0ada87551aa86988Jim Ingham //------------------------------------------------------------------ 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Set the valid thread to be checked when the breakpoint is hit. 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] thread_id 37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If this thread hits the breakpoint, we stop, otherwise not. 37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetThreadID (lldb::tid_t thread_id); 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Return the current stop thread value. 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The thread id for which the breakpoint hit will stop, LLDB_INVALID_THREAD_ID for all threads. 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::tid_t 38628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetThreadID () const; 38728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 38828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 38928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SetThreadIndex (uint32_t index); 39028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 39128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham uint32_t 39228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetThreadIndex() const; 39328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 39428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 39528e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SetThreadName (const char *thread_name); 39628e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 39728e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham const char * 39828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetThreadName () const; 39928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 40028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 40128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SetQueueName (const char *queue_name); 40228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 40328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham const char * 40428e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham GetQueueName () const; 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// Set the callback action invoked when the breakpoint is hit. 40821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// 40924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] callback 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The method that will get called when the breakpoint is hit. 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] baton 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A void * pointer that will get passed back to the callback function. 41321f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// @param[in] is_synchronous 41421f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// If \b true the callback will be run on the private event thread 41521f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// before the stop event gets reported. If false, the callback will get 41621f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// handled on the public event thead after the stop has been posted. 41721f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// 41821f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// @return 41921f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// \b true if the process should stop when you hit the breakpoint. 42021f37ad875d4f50d1b4b3d307e120f6d27103730Jim Ingham /// \b false if it should continue. 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetCallback (BreakpointHitCallback callback, 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void *baton, 42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool is_synchronous = false); 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetCallback (BreakpointHitCallback callback, 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const lldb::BatonSP &callback_baton_sp, 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool is_synchronous = false); 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClearCallback (); 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 436d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// Set the breakpoint's condition. 437d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// 438d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// @param[in] condition 439d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// The condition expression to evaluate when the breakpoint is hit. 440d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// Pass in NULL to clear the condition. 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 442d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham void SetCondition (const char *condition); 443d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham 444d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham //------------------------------------------------------------------ 445d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// Return a pointer to the text of the condition expression. 446d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// 447d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// @return 448d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham /// A pointer to the condition expression text, or NULL if no 449d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham // condition has been set. 450d168690e51f9020b926d3d0d57dc9a2cfb2095a8Jim Ingham //------------------------------------------------------------------ 451ac35442b2b1a35ea3100c870214977e3bddb76f6Jim Ingham const char *GetConditionText () const; 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The next section are various utility functions. 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 45724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 45824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Return the number of breakpoint locations that have resolved to 45924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// actual breakpoint sites. 46024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 46124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number locations resolved breakpoint sites. 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumResolvedLocations() const; 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Return the number of breakpoint locations. 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The number breakpoint locations. 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner size_t 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumLocations() const; 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Put a description of this breakpoint into the stream \a s. 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 47924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] s 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Stream into which to dump the description. 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] level 48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The description level that indicates the detail level to 48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// provide. 48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see lldb::DescriptionLevel 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_locations = false); 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 49124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 492090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// Set the "kind" description for a breakpoint. If the breakpoint is hit 493090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// the stop info will show this "kind" description instead of the breakpoint 494090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// number. Mostly useful for internal breakpoints, where the breakpoint number 495090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// doesn't have meaning to the user. 496090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// 497090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// @param[in] kind 498090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// New "kind" description. 499090f83176695d86197b0e86b67dee4160ec5003dJim Ingham //------------------------------------------------------------------ 500090f83176695d86197b0e86b67dee4160ec5003dJim Ingham void 501090f83176695d86197b0e86b67dee4160ec5003dJim Ingham SetBreakpointKind (const char *kind) 502090f83176695d86197b0e86b67dee4160ec5003dJim Ingham { 503090f83176695d86197b0e86b67dee4160ec5003dJim Ingham m_kind_description.assign (kind); 504090f83176695d86197b0e86b67dee4160ec5003dJim Ingham } 505090f83176695d86197b0e86b67dee4160ec5003dJim Ingham 506090f83176695d86197b0e86b67dee4160ec5003dJim Ingham //------------------------------------------------------------------ 507090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// Return the "kind" description for a breakpoint. 508090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// 509090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// @return 510090f83176695d86197b0e86b67dee4160ec5003dJim Ingham /// The breakpoint kind, or NULL if none is set. 511090f83176695d86197b0e86b67dee4160ec5003dJim Ingham //------------------------------------------------------------------ 512090f83176695d86197b0e86b67dee4160ec5003dJim Ingham const char *GetBreakpointKind () const 513090f83176695d86197b0e86b67dee4160ec5003dJim Ingham { 514090f83176695d86197b0e86b67dee4160ec5003dJim Ingham return m_kind_description.c_str(); 515090f83176695d86197b0e86b67dee4160ec5003dJim Ingham } 516090f83176695d86197b0e86b67dee4160ec5003dJim Ingham 517090f83176695d86197b0e86b67dee4160ec5003dJim Ingham //------------------------------------------------------------------ 51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Accessor for the breakpoint Target. 51924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 52024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This breakpoint's Target. 52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 52224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target & 52324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTarget (); 52424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 52524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Target & 52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTarget () const; 52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 52824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetResolverDescription (Stream *s); 53024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 531a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen //------------------------------------------------------------------ 532a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// Find breakpoint locations which match the (filename, line_number) description. 533a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// The breakpoint location collection is to be filled with the matching locations. 534a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// It should be initialized with 0 size by the API client. 535a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// 536a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// @return 537a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// True if there is a match 538a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// 539a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// The locations which match the filename and line_number in loc_coll. If its 540a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// size is 0 and true is returned, it means the breakpoint fully matches the 541a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen /// description. 542a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen //------------------------------------------------------------------ 543a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen bool GetMatchingFileLine(const ConstString &filename, uint32_t line_number, 544a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen BreakpointLocationCollection &loc_coll); 545a62ad7c886252a08d614a2b391d0774a151b7196Johnny Chen 54624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFilterDescription (Stream *s); 54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Returns the BreakpointOptions structure set at the breakpoint level. 55124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 55224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Meant to be used by the BreakpointLocation class. 55324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A pointer to this breakpoint's BreakpointOptions. 55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointOptions * 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetOptions (); 55924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Invoke the callback action when the breakpoint is hit. 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Meant to be used by the BreakpointLocation class. 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] context 56724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Described the breakpoint event. 56824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 56924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] bp_loc_id 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Which breakpoint location hit this breakpoint. 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 57224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 57324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \b true if the target should stop at this breakpoint and \b false not. 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 57624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner InvokeCallback (StoppointCallbackContext *context, 57724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::break_id_t bp_loc_id); 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 579643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Claytonprotected: 580643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton friend class Target; 581643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 582643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton // Protected Methods 583643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 584643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 585643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 586643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 587643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton /// Constructors and Destructors 588643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton /// Only the Target can make a breakpoint, and it owns the breakpoint lifespans. 589643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton /// The constructor takes a filter and a resolver. Up in Target there are convenience 590643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton /// variants that make breakpoints for some common cases. 591643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton //------------------------------------------------------------------ 592643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton // This is the generic constructor 593643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton Breakpoint(Target &target, lldb::SearchFilterSP &filter_sp, lldb::BreakpointResolverSP &resolver_sp); 594fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 595fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham friend class BreakpointLocation; // To call the following two when determining whether to stop. 596fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 597fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham void 598fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham DecrementIgnoreCount(); 599fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 600fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham // BreakpointLocation::IgnoreCountShouldStop & Breakpoint::IgnoreCountShouldStop can only be called once per stop, 601fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham // and BreakpointLocation::IgnoreCountShouldStop should be tested first, and if it returns false we should 602fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham // continue, otherwise we should test Breakpoint::IgnoreCountShouldStop. 603fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham 604fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham bool 605fdbd10abe4f1f0e97647355823a8e2cd5f50856bJim Ingham IgnoreCountShouldStop (); 606643ee7301b5d4b05c321d906bc0d7ff11f571295Greg Clayton 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For Breakpoint only 61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 61128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham bool m_being_created; 61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Target &m_target; // The target that holds this breakpoint. 61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::SearchFilterSP m_filter_sp; // The filter that constrains the breakpoint's domain. 61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::BreakpointResolverSP m_resolver_sp; // The resolver that defines this breakpoint. 61524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointOptions m_options; // Settable breakpoint options 61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner BreakpointLocationList m_locations; // The list of locations currently found for this breakpoint. 617090f83176695d86197b0e86b67dee4160ec5003dJim Ingham std::string m_kind_description; 61828e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 61928e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 62028e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SendBreakpointChangedEvent (lldb::BreakpointEventType eventKind); 62128e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham 62228e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham void 62328e23861bedbeb5e46be7d2af4c33bf5132422c6Jim Ingham SendBreakpointChangedEvent (BreakpointEventData *data); 62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN(Breakpoint); 62624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 62724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 62824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 63024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Breakpoint_h_ 631