• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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