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