blob: 2f012ecf715f913f9adaa1781779c765d7ac1a3f [file] [log] [blame]
Johnny Chenc3fba812011-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 Inghamefbdd222012-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 Chenc3fba812011-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:
44 SBThread ();
45
46 SBThread (const lldb::SBThread &thread);
47
48 ~SBThread();
49
50 bool
51 IsValid() const;
52
53 void
54 Clear ();
55
56 lldb::StopReason
57 GetStopReason();
58
59 %feature("docstring", "
60 /// Get the number of words associated with the stop reason.
61 /// See also GetStopReasonDataAtIndex().
62 ") GetStopReasonDataCount;
63 size_t
64 GetStopReasonDataCount();
65
66 %feature("docstring", "
67 //--------------------------------------------------------------------------
68 /// Get information associated with a stop reason.
69 ///
70 /// Breakpoint stop reasons will have data that consists of pairs of
71 /// breakpoint IDs followed by the breakpoint location IDs (they always come
72 /// in pairs).
73 ///
74 /// Stop Reason Count Data Type
75 /// ======================== ===== =========================================
76 /// eStopReasonNone 0
77 /// eStopReasonTrace 0
78 /// eStopReasonBreakpoint N duple: {breakpoint id, location id}
Johnny Chenbcbefa82011-12-17 02:07:52 +000079 /// eStopReasonWatchpoint 1 watchpoint id
Johnny Chenc3fba812011-07-18 20:13:38 +000080 /// eStopReasonSignal 1 unix signal number
81 /// eStopReasonException N exception data
82 /// eStopReasonPlanComplete 0
83 //--------------------------------------------------------------------------
84 ") GetStopReasonDataAtIndex;
85 uint64_t
86 GetStopReasonDataAtIndex(uint32_t idx);
87
Johnny Chen65f4fb02011-12-19 19:38:09 +000088 %feature("autodoc", "
89 Pass only an (int)length and expect to get a Python string describing the
90 stop reason.
91 ") GetStopDescription;
Johnny Chenc3fba812011-07-18 20:13:38 +000092 size_t
93 GetStopDescription (char *dst, size_t dst_len);
94
Jim Ingham1586d972011-12-17 01:35:57 +000095 SBValue
96 GetStopReturnValue ();
97
Johnny Chenc3fba812011-07-18 20:13:38 +000098 lldb::tid_t
99 GetThreadID () const;
100
101 uint32_t
102 GetIndexID () const;
103
104 const char *
105 GetName () const;
106
107 const char *
108 GetQueueName() const;
109
110 void
111 StepOver (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
112
113 void
114 StepInto (lldb::RunMode stop_other_threads = lldb::eOnlyDuringStepping);
115
116 void
117 StepOut ();
118
119 void
120 StepOutOfFrame (lldb::SBFrame &frame);
121
122 void
123 StepInstruction(bool step_over);
124
125 SBError
126 StepOverUntil (lldb::SBFrame &frame,
127 lldb::SBFileSpec &file_spec,
128 uint32_t line);
129
130 void
131 RunToAddress (lldb::addr_t addr);
132
133 %feature("docstring", "
134 //--------------------------------------------------------------------------
135 /// LLDB currently supports process centric debugging which means when any
136 /// thread in a process stops, all other threads are stopped. The Suspend()
137 /// call here tells our process to suspend a thread and not let it run when
138 /// the other threads in a process are allowed to run. So when
139 /// SBProcess::Continue() is called, any threads that aren't suspended will
140 /// be allowed to run. If any of the SBThread functions for stepping are
141 /// called (StepOver, StepInto, StepOut, StepInstruction, RunToAddres), the
142 /// thread will now be allowed to run and these funtions will simply return.
143 ///
144 /// Eventually we plan to add support for thread centric debugging where
145 /// each thread is controlled individually and each thread would broadcast
146 /// its state, but we haven't implemented this yet.
147 ///
148 /// Likewise the SBThread::Resume() call will again allow the thread to run
149 /// when the process is continued.
150 ///
151 /// Suspend() and Resume() functions are not currently reference counted, if
152 /// anyone has the need for them to be reference counted, please let us
153 /// know.
154 //--------------------------------------------------------------------------
155 ") Suspend;
156 bool
157 Suspend();
158
159 bool
160 Resume ();
161
162 bool
163 IsSuspended();
164
165 uint32_t
166 GetNumFrames ();
167
168 lldb::SBFrame
169 GetFrameAtIndex (uint32_t idx);
170
171 lldb::SBFrame
172 GetSelectedFrame ();
173
174 lldb::SBFrame
175 SetSelectedFrame (uint32_t frame_idx);
176
177 lldb::SBProcess
178 GetProcess ();
179
180 bool
181 GetDescription (lldb::SBStream &description) const;
Greg Clayton1b925202012-01-29 06:07:39 +0000182
183 %pythoncode %{
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000184 class frames_access(object):
Greg Claytonb302dff2012-02-01 08:09:32 +0000185 '''A helper object that will lazily hand out frames for a thread when supplied an index.'''
186 def __init__(self, sbthread):
187 self.sbthread = sbthread
188
189 def __len__(self):
190 if self.sbthread:
Filipe Cabecinhas3cae38b2012-05-11 20:39:42 +0000191 return int(self.sbthread.GetNumFrames())
Greg Claytonb302dff2012-02-01 08:09:32 +0000192 return 0
193
194 def __getitem__(self, key):
195 if type(key) is int and key < self.sbthread.GetNumFrames():
196 return self.sbthread.GetFrameAtIndex(key)
197 return None
198
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000199 def get_frames_access_object(self):
200 '''An accessor function that returns a frames_access() object which allows lazy frame access from a lldb.SBThread object.'''
201 return self.frames_access (self)
Greg Claytonb302dff2012-02-01 08:09:32 +0000202
Greg Clayton394da8e2012-02-01 02:30:27 +0000203 def get_thread_frames(self):
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000204 '''An accessor function that returns a list() that contains all frames in a lldb.SBThread object.'''
Greg Clayton394da8e2012-02-01 02:30:27 +0000205 frames = []
206 for frame in self:
207 frames.append(frame)
208 return frames
Greg Claytonb302dff2012-02-01 08:09:32 +0000209
Greg Clayton1b925202012-01-29 06:07:39 +0000210 __swig_getmethods__["id"] = GetThreadID
Greg Clayton2a94be12012-06-29 22:00:42 +0000211 if _newclass: id = property(GetThreadID, None, doc='''A read only property that returns the thread ID as an integer.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000212
213 __swig_getmethods__["idx"] = GetIndexID
Greg Clayton2a94be12012-06-29 22:00:42 +0000214 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 Clayton1b925202012-01-29 06:07:39 +0000215
216 __swig_getmethods__["return_value"] = GetStopReturnValue
Greg Clayton2a94be12012-06-29 22:00:42 +0000217 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 Clayton1b925202012-01-29 06:07:39 +0000218
219 __swig_getmethods__["process"] = GetProcess
Greg Clayton2a94be12012-06-29 22:00:42 +0000220 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 Clayton1b925202012-01-29 06:07:39 +0000221
222 __swig_getmethods__["num_frames"] = GetNumFrames
Greg Clayton2a94be12012-06-29 22:00:42 +0000223 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 Clayton1b925202012-01-29 06:07:39 +0000224
Greg Clayton394da8e2012-02-01 02:30:27 +0000225 __swig_getmethods__["frames"] = get_thread_frames
Greg Clayton2a94be12012-06-29 22:00:42 +0000226 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 Clayton394da8e2012-02-01 02:30:27 +0000227
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000228 __swig_getmethods__["frame"] = get_frames_access_object
Greg Clayton2a94be12012-06-29 22:00:42 +0000229 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 Claytonb302dff2012-02-01 08:09:32 +0000230
Greg Clayton1b925202012-01-29 06:07:39 +0000231 __swig_getmethods__["name"] = GetName
Greg Clayton2a94be12012-06-29 22:00:42 +0000232 if _newclass: name = property(GetName, None, doc='''A read only property that returns the name of this thread as a string.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000233
234 __swig_getmethods__["queue"] = GetQueueName
Greg Clayton2a94be12012-06-29 22:00:42 +0000235 if _newclass: queue = property(GetQueueName, None, doc='''A read only property that returns the dispatch queue name of this thread as a string.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000236
237 __swig_getmethods__["stop_reason"] = GetStopReason
Greg Clayton2a94be12012-06-29 22:00:42 +0000238 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 Clayton1b925202012-01-29 06:07:39 +0000239
240 __swig_getmethods__["is_suspended"] = IsSuspended
Greg Clayton2a94be12012-06-29 22:00:42 +0000241 if _newclass: is_suspended = property(IsSuspended, None, doc='''A read only property that returns a boolean value that indicates if this thread is suspended.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000242 %}
243
Johnny Chenc3fba812011-07-18 20:13:38 +0000244};
245
246} // namespace lldb