blob: f2517366160a5d69a5628964f72e2ae031a258c9 [file] [log] [blame]
Johnny Chen357033b2011-07-18 20:13:38 +00001//===-- SWIG Interface for SBThread -----------------------------*- 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
10namespace lldb {
11
12%feature("docstring",
13"Represents a thread of execution. SBProcess contains SBThread(s).
14
Jim Ingham18b46892012-07-13 20:18:18 +000015SBThreads can be referred to by their ID, which maps to the system specific thread
16identifier, or by IndexID. The ID may or may not be unique depending on whether the
17system reuses its thread identifiers. The IndexID is a monotonically increasing identifier
18that will always uniquely reference a particular thread, and when that thread goes
19away it will not be reused.
20
Johnny Chen357033b2011-07-18 20:13:38 +000021SBThread supports frame iteration. For example (from test/python_api/
22lldbutil/iter/TestLLDBIterator.py),
23
24 from lldbutil import print_stacktrace
25 stopped_due_to_breakpoint = False
26 for thread in process:
27 if self.TraceOn():
28 print_stacktrace(thread)
29 ID = thread.GetThreadID()
30 if thread.GetStopReason() == lldb.eStopReasonBreakpoint:
31 stopped_due_to_breakpoint = True
32 for frame in thread:
33 self.assertTrue(frame.GetThread().GetThreadID() == ID)
34 if self.TraceOn():
35 print frame
36
37 self.assertTrue(stopped_due_to_breakpoint)
38
39See also SBProcess and SBFrame."
40) SBThread;
41class SBThread
42{
43public:
Daniel Malea54e14612013-10-03 22:21:09 +000044 //------------------------------------------------------------------
45 // Broadcaster bits.
46 //------------------------------------------------------------------
47 enum
48 {
49 eBroadcastBitStackChanged = (1 << 0),
50 eBroadcastBitThreadSuspended = (1 << 1),
51 eBroadcastBitThreadResumed = (1 << 2),
52 eBroadcastBitSelectedFrameChanged = (1 << 3),
53 eBroadcastBitThreadSelected = (1 << 4)
54 };
55
56
Johnny Chen357033b2011-07-18 20:13:38 +000057 SBThread ();
58
59 SBThread (const lldb::SBThread &thread);
60
61 ~SBThread();
Daniel Malea54e14612013-10-03 22:21:09 +000062
63 static const char *
64 GetBroadcasterClassName ();
Jim Ingham4f465cf2012-10-10 18:32:14 +000065
66 static bool
67 EventIsThreadEvent (const SBEvent &event);
68
69 static SBFrame
70 GetStackFrameFromEvent (const SBEvent &event);
71
72 static SBThread
73 GetThreadFromEvent (const SBEvent &event);
Johnny Chen357033b2011-07-18 20:13:38 +000074
75 bool
76 IsValid() const;
77
78 void
79 Clear ();
80
81 lldb::StopReason
82 GetStopReason();
83
84 %feature("docstring", "
85 /// Get the number of words associated with the stop reason.
86 /// See also GetStopReasonDataAtIndex().
87 ") GetStopReasonDataCount;
88 size_t
89 GetStopReasonDataCount();
90
91 %feature("docstring", "
92 //--------------------------------------------------------------------------
93 /// Get information associated with a stop reason.
94 ///
95 /// Breakpoint stop reasons will have data that consists of pairs of
96 /// breakpoint IDs followed by the breakpoint location IDs (they always come
97 /// in pairs).
98 ///
99 /// Stop Reason Count Data Type
100 /// ======================== ===== =========================================
101 /// eStopReasonNone 0
102 /// eStopReasonTrace 0
103 /// eStopReasonBreakpoint N duple: {breakpoint id, location id}
Johnny Chen290fa412011-12-17 02:07:52 +0000104 /// eStopReasonWatchpoint 1 watchpoint id
Johnny Chen357033b2011-07-18 20:13:38 +0000105 /// eStopReasonSignal 1 unix signal number
106 /// eStopReasonException N exception data
Greg Clayton90ba8112012-12-05 00:16:59 +0000107 /// eStopReasonExec 0
Johnny Chen357033b2011-07-18 20:13:38 +0000108 /// eStopReasonPlanComplete 0
109 //--------------------------------------------------------------------------
110 ") GetStopReasonDataAtIndex;
111 uint64_t
112 GetStopReasonDataAtIndex(uint32_t idx);
113
Johnny Chencdd7e8b2011-12-19 19:38:09 +0000114 %feature("autodoc", "
115 Pass only an (int)length and expect to get a Python string describing the
116 stop reason.
117 ") GetStopDescription;
Johnny Chen357033b2011-07-18 20:13:38 +0000118 size_t
119 GetStopDescription (char *dst, size_t dst_len);
120
Jim Ingham73ca05a2011-12-17 01:35:57 +0000121 SBValue
122 GetStopReturnValue ();
123
Jason Molenda2fd83352014-02-05 05:44:54 +0000124 %feature("autodoc", "
125 Returns a unique thread identifier (type lldb::tid_t, typically a 64-bit type)
126 for the current SBThread that will remain constant throughout the thread's
127 lifetime in this process and will not be reused by another thread during this
128 process lifetime. On Mac OS X systems, this is a system-wide unique thread
129 identifier; this identifier is also used by other tools like sample which helps
130 to associate data from those tools with lldb. See related GetIndexID.
131 ")
132 GetThreadID;
Johnny Chen357033b2011-07-18 20:13:38 +0000133 lldb::tid_t
134 GetThreadID () const;
135
Jason Molenda2fd83352014-02-05 05:44:54 +0000136 %feature("autodoc", "
137 Return the index number for this SBThread. The index number is the same thing
138 that a user gives as an argument to 'thread select' in the command line lldb.
139 These numbers start at 1 (for the first thread lldb sees in a debug session)
140 and increments up throughout the process lifetime. An index number will not be
141 reused for a different thread later in a process - thread 1 will always be
142 associated with the same thread. See related GetThreadID.
143 This method returns a uint32_t index number, takes no arguments.
144 ")
145 GetIndexID;
Johnny Chen357033b2011-07-18 20:13:38 +0000146 uint32_t
147 GetIndexID () const;
148
149 const char *
150 GetName () const;
151
Jason Molenda8c713372013-11-05 11:00:35 +0000152 %feature("autodoc", "
153 Return the queue name associated with this thread, if any, as a str.
154 For example, with a libdispatch (aka Grand Central Dispatch) queue.
155 ") GetQueueName;
156
Johnny Chen357033b2011-07-18 20:13:38 +0000157 const char *
158 GetQueueName() const;
159
Jason Molenda8c713372013-11-05 11:00:35 +0000160 %feature("autodoc", "
161 Return the dispatch_queue_id for this thread, if any, as a lldb::queue_id_t.
162 For example, with a libdispatch (aka Grand Central Dispatch) queue.
163 ") GetQueueID;
164
Jason Molenda4fdb5862013-10-21 23:52:54 +0000165 lldb::queue_id_t
166 GetQueueID() const;
167
Johnny Chen357033b2011-07-18 20:13:38 +0000168 void
169 StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
170
171 void
172 StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
173
174 void
Jim Inghamc6276822012-12-12 19:58:40 +0000175 StepInto (const char *target_name, lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
176
177 void
Johnny Chen357033b2011-07-18 20:13:38 +0000178 StepOut ();
179
180 void
181 StepOutOfFrame (lldb::SBFrame &frame);
182
183 void
184 StepInstruction(bool step_over);
185
186 SBError
Richard Mittonf86248d2013-09-12 02:20:34 +0000187 StepOverUntil (lldb::SBFrame &frame,
188 lldb::SBFileSpec &file_spec,
Johnny Chen357033b2011-07-18 20:13:38 +0000189 uint32_t line);
190
Richard Mittonf86248d2013-09-12 02:20:34 +0000191 SBError
192 JumpToLine (lldb::SBFileSpec &file_spec, uint32_t line);
193
Johnny Chen357033b2011-07-18 20:13:38 +0000194 void
195 RunToAddress (lldb::addr_t addr);
196
Jim Ingham44137582012-09-12 00:40:39 +0000197 SBError
Jim Inghamcb640dd2012-09-14 02:14:15 +0000198 ReturnFromFrame (SBFrame &frame, SBValue &return_value);
Jim Ingham44137582012-09-12 00:40:39 +0000199
Johnny Chen357033b2011-07-18 20:13:38 +0000200 %feature("docstring", "
201 //--------------------------------------------------------------------------
202 /// LLDB currently supports process centric debugging which means when any
203 /// thread in a process stops, all other threads are stopped. The Suspend()
204 /// call here tells our process to suspend a thread and not let it run when
205 /// the other threads in a process are allowed to run. So when
206 /// SBProcess::Continue() is called, any threads that aren't suspended will
207 /// be allowed to run. If any of the SBThread functions for stepping are
208 /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddres), the
209 /// thread will now be allowed to run and these funtions will simply return.
210 ///
211 /// Eventually we plan to add support for thread centric debugging where
212 /// each thread is controlled individually and each thread would broadcast
213 /// its state, but we haven't implemented this yet.
214 ///
215 /// Likewise the SBThread::Resume() call will again allow the thread to run
216 /// when the process is continued.
217 ///
218 /// Suspend() and Resume() functions are not currently reference counted, if
219 /// anyone has the need for them to be reference counted, please let us
220 /// know.
221 //--------------------------------------------------------------------------
222 ") Suspend;
223 bool
224 Suspend();
225
226 bool
227 Resume ();
228
229 bool
230 IsSuspended();
231
Andrew Kaylora75418d2013-04-15 23:33:53 +0000232 bool
233 IsStopped();
234
Johnny Chen357033b2011-07-18 20:13:38 +0000235 uint32_t
236 GetNumFrames ();
237
238 lldb::SBFrame
239 GetFrameAtIndex (uint32_t idx);
240
241 lldb::SBFrame
242 GetSelectedFrame ();
243
244 lldb::SBFrame
245 SetSelectedFrame (uint32_t frame_idx);
246
247 lldb::SBProcess
248 GetProcess ();
249
250 bool
251 GetDescription (lldb::SBStream &description) const;
Greg Clayton13d19502012-01-29 06:07:39 +0000252
Jim Ingham4f465cf2012-10-10 18:32:14 +0000253 bool
254 GetStatus (lldb::SBStream &status) const;
255
Enrico Granatac3387332013-05-03 01:29:27 +0000256 bool
257 operator == (const lldb::SBThread &rhs) const;
258
259 bool
260 operator != (const lldb::SBThread &rhs) const;
Jason Molenda8ee9cb52013-11-16 01:24:22 +0000261
Jason Molenda5dd49162013-11-06 00:04:44 +0000262 %feature("autodoc","
263 Given an argument of str to specify the type of thread-origin extended
264 backtrace to retrieve, query whether the origin of this thread is
265 available. An SBThread is retured; SBThread.IsValid will return true
266 if an extended backtrace was available. The returned SBThread is not
267 a part of the SBProcess' thread list and it cannot be manipulated like
268 normal threads -- you cannot step or resume it, for instance -- it is
269 intended to used primarily for generating a backtrace. You may request
270 the returned thread's own thread origin in turn.
Jason Molenda008c45f2013-11-12 23:33:32 +0000271 ") GetExtendedBacktraceThread;
Jason Molenda5dd49162013-11-06 00:04:44 +0000272 lldb::SBThread
Jason Molenda008c45f2013-11-12 23:33:32 +0000273 GetExtendedBacktraceThread (const char *type);
Jason Molenda5dd49162013-11-06 00:04:44 +0000274
Jason Molenda8ee9cb52013-11-16 01:24:22 +0000275 %feature("autodoc","
276 Takes no arguments, returns a uint32_t.
277 If this SBThread is an ExtendedBacktrace thread, get the IndexID of the
278 original thread that this ExtendedBacktrace thread represents, if
279 available. The thread that was running this backtrace in the past may
280 not have been registered with lldb's thread index (if it was created,
281 did its work, and was destroyed without lldb ever stopping execution).
282 In that case, this ExtendedBacktrace thread's IndexID will be returned.
283 ") GetExtendedBacktraceOriginatingIndexID;
284 uint32_t
285 GetExtendedBacktraceOriginatingIndexID();
286
Greg Clayton13d19502012-01-29 06:07:39 +0000287 %pythoncode %{
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000288 class frames_access(object):
Greg Clayton6b2bd932012-02-01 08:09:32 +0000289 '''A helper object that will lazily hand out frames for a thread when supplied an index.'''
290 def __init__(self, sbthread):
291 self.sbthread = sbthread
292
293 def __len__(self):
294 if self.sbthread:
Filipe Cabecinhas1a96ef82012-05-11 20:39:42 +0000295 return int(self.sbthread.GetNumFrames())
Greg Clayton6b2bd932012-02-01 08:09:32 +0000296 return 0
297
298 def __getitem__(self, key):
299 if type(key) is int and key < self.sbthread.GetNumFrames():
300 return self.sbthread.GetFrameAtIndex(key)
301 return None
302
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000303 def get_frames_access_object(self):
304 '''An accessor function that returns a frames_access() object which allows lazy frame access from a lldb.SBThread object.'''
305 return self.frames_access (self)
Greg Clayton6b2bd932012-02-01 08:09:32 +0000306
Greg Clayton24155862012-02-01 02:30:27 +0000307 def get_thread_frames(self):
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000308 '''An accessor function that returns a list() that contains all frames in a lldb.SBThread object.'''
Greg Clayton24155862012-02-01 02:30:27 +0000309 frames = []
310 for frame in self:
311 frames.append(frame)
312 return frames
Greg Clayton6b2bd932012-02-01 08:09:32 +0000313
Greg Clayton13d19502012-01-29 06:07:39 +0000314 __swig_getmethods__["id"] = GetThreadID
Greg Clayton5ef31a92012-06-29 22:00:42 +0000315 if _newclass: id = property(GetThreadID, None, doc='''A read only property that returns the thread ID as an integer.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000316
317 __swig_getmethods__["idx"] = GetIndexID
Greg Clayton5ef31a92012-06-29 22:00:42 +0000318 if _newclass: idx = property(GetIndexID, None, doc='''A read only property that returns the thread index ID as an integer. Thread index ID values start at 1 and increment as threads come and go and can be used to uniquely identify threads.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000319
320 __swig_getmethods__["return_value"] = GetStopReturnValue
Greg Clayton5ef31a92012-06-29 22:00:42 +0000321 if _newclass: return_value = property(GetStopReturnValue, None, doc='''A read only property that returns an lldb object that represents the return value from the last stop (lldb.SBValue) if we just stopped due to stepping out of a function.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000322
323 __swig_getmethods__["process"] = GetProcess
Greg Clayton5ef31a92012-06-29 22:00:42 +0000324 if _newclass: process = property(GetProcess, None, doc='''A read only property that returns an lldb object that represents the process (lldb.SBProcess) that owns this thread.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000325
326 __swig_getmethods__["num_frames"] = GetNumFrames
Greg Clayton5ef31a92012-06-29 22:00:42 +0000327 if _newclass: num_frames = property(GetNumFrames, None, doc='''A read only property that returns the number of stack frames in this thread as an integer.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000328
Greg Clayton24155862012-02-01 02:30:27 +0000329 __swig_getmethods__["frames"] = get_thread_frames
Greg Clayton5ef31a92012-06-29 22:00:42 +0000330 if _newclass: frames = property(get_thread_frames, None, doc='''A read only property that returns a list() of lldb.SBFrame objects for all frames in this thread.''')
Greg Clayton24155862012-02-01 02:30:27 +0000331
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000332 __swig_getmethods__["frame"] = get_frames_access_object
Greg Clayton5ef31a92012-06-29 22:00:42 +0000333 if _newclass: frame = property(get_frames_access_object, None, doc='''A read only property that returns an object that can be used to access frames as an array ("frame_12 = lldb.thread.frame[12]").''')
Greg Clayton6b2bd932012-02-01 08:09:32 +0000334
Greg Clayton13d19502012-01-29 06:07:39 +0000335 __swig_getmethods__["name"] = GetName
Greg Clayton5ef31a92012-06-29 22:00:42 +0000336 if _newclass: name = property(GetName, None, doc='''A read only property that returns the name of this thread as a string.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000337
338 __swig_getmethods__["queue"] = GetQueueName
Greg Clayton5ef31a92012-06-29 22:00:42 +0000339 if _newclass: queue = property(GetQueueName, None, doc='''A read only property that returns the dispatch queue name of this thread as a string.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000340
Jason Molenda4fdb5862013-10-21 23:52:54 +0000341 __swig_getmethods__["queue_id"] = GetQueueID
Jason Molenda5e873db2013-10-22 01:37:18 +0000342 if _newclass: queue_id = property(GetQueueID, None, doc='''A read only property that returns the dispatch queue id of this thread as an integer.''')
Jason Molenda4fdb5862013-10-21 23:52:54 +0000343
Greg Clayton13d19502012-01-29 06:07:39 +0000344 __swig_getmethods__["stop_reason"] = GetStopReason
Greg Clayton5ef31a92012-06-29 22:00:42 +0000345 if _newclass: stop_reason = property(GetStopReason, None, doc='''A read only property that returns an lldb enumeration value (see enumerations that start with "lldb.eStopReason") that represents the reason this thread stopped.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000346
347 __swig_getmethods__["is_suspended"] = IsSuspended
Greg Clayton5ef31a92012-06-29 22:00:42 +0000348 if _newclass: is_suspended = property(IsSuspended, None, doc='''A read only property that returns a boolean value that indicates if this thread is suspended.''')
Andrew Kaylora75418d2013-04-15 23:33:53 +0000349
350 __swig_getmethods__["is_stopped"] = IsStopped
351 if _newclass: is_stopped = property(IsStopped, None, doc='''A read only property that returns a boolean value that indicates if this thread is stopped but not exited.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000352 %}
353
Johnny Chen357033b2011-07-18 20:13:38 +0000354};
355
356} // namespace lldb