Home | History | Annotate | Download | only in interface
      1 //===-- SWIG Interface for SBBreakpoint -------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 namespace lldb {
     11 
     12 %feature("docstring",
     13 "Represents a logical breakpoint and its associated settings.
     14 
     15 For example (from test/functionalities/breakpoint/breakpoint_ignore_count/
     16 TestBreakpointIgnoreCount.py),
     17 
     18     def breakpoint_ignore_count_python(self):
     19         '''Use Python APIs to set breakpoint ignore count.'''
     20         exe = os.path.join(os.getcwd(), 'a.out')
     21 
     22         # Create a target by the debugger.
     23         target = self.dbg.CreateTarget(exe)
     24         self.assertTrue(target, VALID_TARGET)
     25 
     26         # Now create a breakpoint on main.c by name 'c'.
     27         breakpoint = target.BreakpointCreateByName('c', 'a.out')
     28         self.assertTrue(breakpoint and
     29                         breakpoint.GetNumLocations() == 1,
     30                         VALID_BREAKPOINT)
     31 
     32         # Get the breakpoint location from breakpoint after we verified that,
     33         # indeed, it has one location.
     34         location = breakpoint.GetLocationAtIndex(0)
     35         self.assertTrue(location and
     36                         location.IsEnabled(),
     37                         VALID_BREAKPOINT_LOCATION)
     38 
     39         # Set the ignore count on the breakpoint location.
     40         location.SetIgnoreCount(2)
     41         self.assertTrue(location.GetIgnoreCount() == 2,
     42                         'SetIgnoreCount() works correctly')
     43 
     44         # Now launch the process, and do not stop at entry point.
     45         process = target.LaunchSimple(None, None, os.getcwd())
     46         self.assertTrue(process, PROCESS_IS_VALID)
     47 
     48         # Frame#0 should be on main.c:37, frame#1 should be on main.c:25, and
     49         # frame#2 should be on main.c:48.
     50         #lldbutil.print_stacktraces(process)
     51         from lldbutil import get_stopped_thread
     52         thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint)
     53         self.assertTrue(thread != None, 'There should be a thread stopped due to breakpoint')
     54         frame0 = thread.GetFrameAtIndex(0)
     55         frame1 = thread.GetFrameAtIndex(1)
     56         frame2 = thread.GetFrameAtIndex(2)
     57         self.assertTrue(frame0.GetLineEntry().GetLine() == self.line1 and
     58                         frame1.GetLineEntry().GetLine() == self.line3 and
     59                         frame2.GetLineEntry().GetLine() == self.line4,
     60                         STOPPED_DUE_TO_BREAKPOINT_IGNORE_COUNT)
     61 
     62         # The hit count for the breakpoint should be 3.
     63         self.assertTrue(breakpoint.GetHitCount() == 3)
     64 
     65         process.Continue()
     66 
     67 SBBreakpoint supports breakpoint location iteration, for example,
     68 
     69     for bl in breakpoint:
     70         print 'breakpoint location load addr: %s' % hex(bl.GetLoadAddress())
     71         print 'breakpoint location condition: %s' % hex(bl.GetCondition())
     72 
     73 and rich comparion methods which allow the API program to use,
     74 
     75     if aBreakpoint == bBreakpoint:
     76         ...
     77 
     78 to compare two breakpoints for equality."
     79 ) SBBreakpoint;
     80 class SBBreakpoint
     81 {
     82 public:
     83 
     84     typedef bool (*BreakpointHitCallback) (void *baton,
     85                                            SBProcess &process,
     86                                            SBThread &thread,
     87                                            lldb::SBBreakpointLocation &location);
     88 
     89     SBBreakpoint ();
     90 
     91     SBBreakpoint (const lldb::SBBreakpoint& rhs);
     92 
     93     ~SBBreakpoint();
     94 
     95     break_id_t
     96     GetID () const;
     97 
     98     bool
     99     IsValid() const;
    100 
    101     void
    102     ClearAllBreakpointSites ();
    103 
    104     lldb::SBBreakpointLocation
    105     FindLocationByAddress (lldb::addr_t vm_addr);
    106 
    107     lldb::break_id_t
    108     FindLocationIDByAddress (lldb::addr_t vm_addr);
    109 
    110     lldb::SBBreakpointLocation
    111     FindLocationByID (lldb::break_id_t bp_loc_id);
    112 
    113     lldb::SBBreakpointLocation
    114     GetLocationAtIndex (uint32_t index);
    115 
    116     void
    117     SetEnabled (bool enable);
    118 
    119     bool
    120     IsEnabled ();
    121 
    122     void
    123     SetOneShot (bool one_shot);
    124 
    125     bool
    126     IsOneShot ();
    127 
    128     bool
    129     IsInternal ();
    130 
    131     uint32_t
    132     GetHitCount () const;
    133 
    134     void
    135     SetIgnoreCount (uint32_t count);
    136 
    137     uint32_t
    138     GetIgnoreCount () const;
    139 
    140     %feature("docstring", "
    141     //--------------------------------------------------------------------------
    142     /// The breakpoint stops only if the condition expression evaluates to true.
    143     //--------------------------------------------------------------------------
    144     ") SetCondition;
    145     void
    146     SetCondition (const char *condition);
    147 
    148     %feature("docstring", "
    149     //------------------------------------------------------------------
    150     /// Get the condition expression for the breakpoint.
    151     //------------------------------------------------------------------
    152     ") GetCondition;
    153     const char *
    154     GetCondition ();
    155 
    156     void
    157     SetThreadID (lldb::tid_t sb_thread_id);
    158 
    159     lldb::tid_t
    160     GetThreadID ();
    161 
    162     void
    163     SetThreadIndex (uint32_t index);
    164 
    165     uint32_t
    166     GetThreadIndex() const;
    167 
    168     void
    169     SetThreadName (const char *thread_name);
    170 
    171     const char *
    172     GetThreadName () const;
    173 
    174     void
    175     SetQueueName (const char *queue_name);
    176 
    177     const char *
    178     GetQueueName () const;
    179 
    180     void
    181     SetCallback (BreakpointHitCallback callback, void *baton);
    182 
    183     size_t
    184     GetNumResolvedLocations() const;
    185 
    186     size_t
    187     GetNumLocations() const;
    188 
    189     bool
    190     GetDescription (lldb::SBStream &description);
    191 
    192     bool
    193     operator == (const lldb::SBBreakpoint& rhs);
    194 
    195     bool
    196     operator != (const lldb::SBBreakpoint& rhs);
    197 
    198     static bool
    199     EventIsBreakpointEvent (const lldb::SBEvent &event);
    200 
    201     static lldb::BreakpointEventType
    202     GetBreakpointEventTypeFromEvent (const lldb::SBEvent& event);
    203 
    204     static lldb::SBBreakpoint
    205     GetBreakpointFromEvent (const lldb::SBEvent& event);
    206 
    207     static lldb::SBBreakpointLocation
    208     GetBreakpointLocationAtIndexFromEvent (const lldb::SBEvent& event, uint32_t loc_idx);
    209 
    210     static uint32_t
    211     GetNumBreakpointLocationsFromEvent (const lldb::SBEvent &event_sp);
    212 
    213     %pythoncode %{
    214 
    215         __swig_getmethods__["id"] = GetID
    216         if _newclass: id = property(GetID, None, doc='''A read only property that returns the ID of this breakpoint.''')
    217 
    218         __swig_getmethods__["enabled"] = IsEnabled
    219         __swig_setmethods__["enabled"] = SetEnabled
    220         if _newclass: enabled = property(IsEnabled, SetEnabled, doc='''A read/write property that configures whether this breakpoint is enabled or not.''')
    221 
    222         __swig_getmethods__["one_shot"] = IsOneShot
    223         __swig_setmethods__["one_shot"] = SetOneShot
    224         if _newclass: one_shot = property(IsOneShot, SetOneShot, doc='''A read/write property that configures whether this breakpoint is one-shot (deleted when hit) or not.''')
    225 
    226         __swig_getmethods__["num_locations"] = GetNumLocations
    227         if _newclass: num_locations = property(GetNumLocations, None, doc='''A read only property that returns the count of locations of this breakpoint.''')
    228 
    229     %}
    230 
    231 
    232 };
    233 
    234 } // namespace lldb
    235