blob: 99ba6cf66284e777aa4e8252a7950f22756b9cc8 [file] [log] [blame]
Johnny Chenc3fba812011-07-18 20:13:38 +00001//===-- SWIG Interface for SBProcess ----------------------------*- 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 the process associated with the target program.
14
15SBProcess supports thread iteration. For example (from test/lldbutil.py),
16
17# ==================================================
18# Utility functions related to Threads and Processes
19# ==================================================
20
21def get_stopped_threads(process, reason):
22 '''Returns the thread(s) with the specified stop reason in a list.
23
24 The list can be empty if no such thread exists.
25 '''
26 threads = []
27 for t in process:
28 if t.GetStopReason() == reason:
29 threads.append(t)
30 return threads
31
32...
33"
34) SBProcess;
35class SBProcess
36{
37public:
38 //------------------------------------------------------------------
39 /// Broadcaster event bits definitions.
40 //------------------------------------------------------------------
41 enum
42 {
43 eBroadcastBitStateChanged = (1 << 0),
44 eBroadcastBitInterrupt = (1 << 1),
45 eBroadcastBitSTDOUT = (1 << 2),
Han Ming Ongfb9cee62012-11-17 00:21:04 +000046 eBroadcastBitSTDERR = (1 << 3),
47 eBroadcastBitProfileData = (1 << 4)
Johnny Chenc3fba812011-07-18 20:13:38 +000048 };
49
50 SBProcess ();
51
52 SBProcess (const lldb::SBProcess& rhs);
53
54 ~SBProcess();
55
Jim Ingham5a15e692012-02-16 06:50:00 +000056 static const char *
57 GetBroadcasterClassName ();
58
Jim Inghamfee26ee2012-10-26 19:18:04 +000059 const char *
60 GetPluginName ();
61
62 const char *
63 GetShortPluginName ();
64
Johnny Chenc3fba812011-07-18 20:13:38 +000065 void
66 Clear ();
67
68 bool
69 IsValid() const;
70
71 lldb::SBTarget
72 GetTarget() const;
73
74 lldb::ByteOrder
75 GetByteOrder() const;
76
Johnny Chen23038b62011-11-28 21:39:07 +000077 %feature("autodoc", "
78 Writes data into the current process's stdin. API client specifies a Python
79 string as the only argument.
80 ") PutSTDIN;
Johnny Chenc3fba812011-07-18 20:13:38 +000081 size_t
82 PutSTDIN (const char *src, size_t src_len);
83
Johnny Chen609b9ce2011-11-28 19:12:25 +000084 %feature("autodoc", "
85 Reads data from the current process's stdout stream. API client specifies
86 the size of the buffer to read data into. It returns the byte buffer in a
87 Python string.
88 ") GetSTDOUT;
Johnny Chenc3fba812011-07-18 20:13:38 +000089 size_t
90 GetSTDOUT (char *dst, size_t dst_len) const;
91
Johnny Chen609b9ce2011-11-28 19:12:25 +000092 %feature("autodoc", "
93 Reads data from the current process's stderr stream. API client specifies
94 the size of the buffer to read data into. It returns the byte buffer in a
95 Python string.
96 ") GetSTDERR;
Johnny Chenc3fba812011-07-18 20:13:38 +000097 size_t
98 GetSTDERR (char *dst, size_t dst_len) const;
99
Han Ming Ongfb9cee62012-11-17 00:21:04 +0000100 size_t
101 GetAsyncProfileData(char *dst, size_t dst_len) const;
102
Johnny Chenc3fba812011-07-18 20:13:38 +0000103 void
104 ReportEventState (const lldb::SBEvent &event, FILE *out) const;
105
106 void
107 AppendEventStateReport (const lldb::SBEvent &event, lldb::SBCommandReturnObject &result);
108
109 %feature("docstring", "
110 //------------------------------------------------------------------
111 /// Remote connection related functions. These will fail if the
112 /// process is not in eStateConnected. They are intended for use
113 /// when connecting to an externally managed debugserver instance.
114 //------------------------------------------------------------------
115 ") RemoteAttachToProcessWithID;
116 bool
117 RemoteAttachToProcessWithID (lldb::pid_t pid,
118 lldb::SBError& error);
119
120 %feature("docstring",
121 "See SBTarget.Launch for argument description and usage."
122 ) RemoteLaunch;
123 bool
124 RemoteLaunch (char const **argv,
125 char const **envp,
126 const char *stdin_path,
127 const char *stdout_path,
128 const char *stderr_path,
129 const char *working_directory,
130 uint32_t launch_flags,
131 bool stop_at_entry,
132 lldb::SBError& error);
133
134 //------------------------------------------------------------------
135 // Thread related functions
136 //------------------------------------------------------------------
137 uint32_t
138 GetNumThreads ();
139
Jim Inghamefbdd222012-07-13 20:18:18 +0000140 %feature("autodoc", "
141 Returns the INDEX'th thread from the list of current threads. The index
142 of a thread is only valid for the current stop. For a persistent thread
143 identifier use either the thread ID or the IndexID. See help on SBThread
144 for more details.
145 ") GetThreadAtIndex;
Johnny Chenc3fba812011-07-18 20:13:38 +0000146 lldb::SBThread
147 GetThreadAtIndex (size_t index);
148
Jim Inghamefbdd222012-07-13 20:18:18 +0000149 %feature("autodoc", "
150 Returns the thread with the given thread ID.
151 ") GetThreadByID;
Johnny Chenc3fba812011-07-18 20:13:38 +0000152 lldb::SBThread
153 GetThreadByID (lldb::tid_t sb_thread_id);
Jim Inghamefbdd222012-07-13 20:18:18 +0000154
155 %feature("autodoc", "
156 Returns the thread with the given thread IndexID.
157 ") GetThreadByIndexID;
158 lldb::SBThread
159 GetThreadByIndexID (uint32_t index_id);
Johnny Chenc3fba812011-07-18 20:13:38 +0000160
Jim Inghamefbdd222012-07-13 20:18:18 +0000161 %feature("autodoc", "
162 Returns the currently selected thread.
163 ") GetSelectedThread;
Johnny Chenc3fba812011-07-18 20:13:38 +0000164 lldb::SBThread
165 GetSelectedThread () const;
166
167 bool
168 SetSelectedThread (const lldb::SBThread &thread);
169
170 bool
Greg Clayton82560f22012-10-12 23:32:11 +0000171 SetSelectedThreadByID (lldb::tid_t tid);
Johnny Chenc3fba812011-07-18 20:13:38 +0000172
Jim Inghamefbdd222012-07-13 20:18:18 +0000173 bool
174 SetSelectedThreadByIndexID (uint32_t index_id);
175
Johnny Chenc3fba812011-07-18 20:13:38 +0000176 //------------------------------------------------------------------
177 // Stepping related functions
178 //------------------------------------------------------------------
179
180 lldb::StateType
181 GetState ();
182
183 int
184 GetExitStatus ();
185
186 const char *
187 GetExitDescription ();
188
189 lldb::pid_t
190 GetProcessID ();
191
192 uint32_t
193 GetAddressByteSize() const;
194
195 %feature("docstring", "
196 Kills the process and shuts down all threads that were spawned to
197 track and monitor process.
198 ") Destroy;
199 lldb::SBError
200 Destroy ();
201
202 lldb::SBError
203 Continue ();
204
205 lldb::SBError
206 Stop ();
207
208 %feature("docstring", "Same as Destroy(self).") Destroy;
209 lldb::SBError
210 Kill ();
211
212 lldb::SBError
213 Detach ();
214
215 %feature("docstring", "Sends the process a unix signal.") Signal;
216 lldb::SBError
217 Signal (int signal);
218
Jim Ingham5d90ade2012-07-27 23:57:19 +0000219 void
220 SendAsyncInterrupt();
221
Johnny Chenc3fba812011-07-18 20:13:38 +0000222 %feature("autodoc", "
223 Reads memory from the current process's address space and removes any
224 traps that may have been inserted into the memory. It returns the byte
225 buffer in a Python string. Example:
226
227 # Read 4 bytes from address 'addr' and assume error.Success() is True.
228 content = process.ReadMemory(addr, 4, error)
229 # Use 'ascii' encoding as each byte of 'content' is within [0..255].
230 new_bytes = bytearray(content, 'ascii')
231 ") ReadMemory;
232 size_t
233 ReadMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
234
235 %feature("autodoc", "
236 Writes memory to the current process's address space and maintains any
237 traps that might be present due to software breakpoints. Example:
238
239 # Create a Python string from the byte array.
240 new_value = str(bytes)
241 result = process.WriteMemory(addr, new_value, error)
242 if not error.Success() or result != len(bytes):
243 print 'SBProcess.WriteMemory() failed!'
244 ") WriteMemory;
245 size_t
246 WriteMemory (addr_t addr, const void *buf, size_t size, lldb::SBError &error);
247
Greg Clayton4a2e3372011-12-15 03:14:23 +0000248 %feature("autodoc", "
249 Reads a NULL terminated C string from the current process's address space.
250 It returns a python string of the exact length, or truncates the string if
251 the maximum character limit is reached. Example:
252
253 # Read a C string of at most 256 bytes from address '0x1000'
254 error = lldb.SBError()
Johnny Chen08413862011-12-15 22:34:59 +0000255 cstring = process.ReadCStringFromMemory(0x1000, 256, error)
Greg Clayton4a2e3372011-12-15 03:14:23 +0000256 if error.Success():
257 print 'cstring: ', cstring
258 else
259 print 'error: ', error
260 ") ReadCStringFromMemory;
261
262 size_t
263 ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
264
265 %feature("autodoc", "
266 Reads an unsigned integer from memory given a byte size and an address.
267 Returns the unsigned integer that was read. Example:
268
269 # Read a 4 byte unsigned integer from address 0x1000
270 error = lldb.SBError()
271 uint = ReadUnsignedFromMemory(0x1000, 4, error)
272 if error.Success():
273 print 'integer: %u' % uint
274 else
275 print 'error: ', error
276
277 ") ReadUnsignedFromMemory;
278
279 uint64_t
280 ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error);
281
282 %feature("autodoc", "
283 Reads a pointer from memory from an address and returns the value. Example:
284
285 # Read a pointer from address 0x1000
286 error = lldb.SBError()
287 ptr = ReadPointerFromMemory(0x1000, error)
288 if error.Success():
289 print 'pointer: 0x%x' % ptr
290 else
291 print 'error: ', error
292
293 ") ReadPointerFromMemory;
294
295 lldb::addr_t
296 ReadPointerFromMemory (addr_t addr, lldb::SBError &error);
297
298
Johnny Chenc3fba812011-07-18 20:13:38 +0000299 // Events
300 static lldb::StateType
301 GetStateFromEvent (const lldb::SBEvent &event);
302
303 static bool
304 GetRestartedFromEvent (const lldb::SBEvent &event);
305
306 static lldb::SBProcess
307 GetProcessFromEvent (const lldb::SBEvent &event);
308
Jim Ingham28e23862012-02-08 05:23:15 +0000309 static bool
310 EventIsProcessEvent (const lldb::SBEvent &event);
311
Johnny Chenc3fba812011-07-18 20:13:38 +0000312 lldb::SBBroadcaster
313 GetBroadcaster () const;
314
315 bool
316 GetDescription (lldb::SBStream &description);
317
318 uint32_t
Johnny Chen191343e2012-05-23 22:34:34 +0000319 GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const;
320
321 uint32_t
Johnny Chenc3fba812011-07-18 20:13:38 +0000322 LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error);
323
324 lldb::SBError
325 UnloadImage (uint32_t image_token);
Johnny Chen9f074f02012-01-06 00:46:12 +0000326
Greg Clayton1b925202012-01-29 06:07:39 +0000327 %pythoncode %{
Greg Claytonb302dff2012-02-01 08:09:32 +0000328 def __get_is_alive__(self):
329 '''Returns "True" if the process is currently alive, "False" otherwise'''
330 s = self.GetState()
331 if (s == eStateAttaching or
332 s == eStateLaunching or
333 s == eStateStopped or
334 s == eStateRunning or
335 s == eStateStepping or
336 s == eStateCrashed or
337 s == eStateSuspended):
338 return True
339 return False
340
341 def __get_is_running__(self):
342 '''Returns "True" if the process is currently running, "False" otherwise'''
343 state = self.GetState()
344 if state == eStateRunning or state == eStateStepping:
345 return True
346 return False
347
348 def __get_is_running__(self):
349 '''Returns "True" if the process is currently stopped, "False" otherwise'''
350 state = self.GetState()
351 if state == eStateStopped or state == eStateCrashed or state == eStateSuspended:
352 return True
353 return False
354
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000355 class threads_access(object):
Greg Claytonb302dff2012-02-01 08:09:32 +0000356 '''A helper object that will lazily hand out thread for a process when supplied an index.'''
357 def __init__(self, sbprocess):
358 self.sbprocess = sbprocess
359
360 def __len__(self):
Filipe Cabecinhas3cae38b2012-05-11 20:39:42 +0000361 if self.sbprocess:
362 return int(self.sbprocess.GetNumThreads())
Greg Claytonb302dff2012-02-01 08:09:32 +0000363 return 0
364
365 def __getitem__(self, key):
366 if type(key) is int and key < len(self):
367 return self.sbprocess.GetThreadAtIndex(key)
368 return None
369
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000370 def get_threads_access_object(self):
371 '''An accessor function that returns a modules_access() object which allows lazy thread access from a lldb.SBProcess object.'''
372 return self.threads_access (self)
Greg Claytonb302dff2012-02-01 08:09:32 +0000373
374 def get_process_thread_list(self):
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000375 '''An accessor function that returns a list() that contains all threads in a lldb.SBProcess object.'''
Greg Claytonb302dff2012-02-01 08:09:32 +0000376 threads = []
Enrico Granata2cb02032012-10-08 19:06:11 +0000377 accessor = self.get_threads_access_object()
378 for idx in range(len(accessor)):
379 threads.append(accessor[idx])
Greg Claytonb302dff2012-02-01 08:09:32 +0000380 return threads
381
382 __swig_getmethods__["threads"] = get_process_thread_list
Greg Clayton2a94be12012-06-29 22:00:42 +0000383 if _newclass: threads = property(get_process_thread_list, None, doc='''A read only property that returns a list() of lldb.SBThread objects for this process.''')
Greg Claytonb302dff2012-02-01 08:09:32 +0000384
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000385 __swig_getmethods__["thread"] = get_threads_access_object
Greg Clayton2a94be12012-06-29 22:00:42 +0000386 if _newclass: thread = property(get_threads_access_object, None, doc='''A read only property that returns an object that can access threads by thread index (thread = lldb.process.thread[12]).''')
Greg Claytonb302dff2012-02-01 08:09:32 +0000387
388 __swig_getmethods__["is_alive"] = __get_is_alive__
Greg Clayton2a94be12012-06-29 22:00:42 +0000389 if _newclass: is_alive = property(__get_is_alive__, None, doc='''A read only property that returns a boolean value that indicates if this process is currently alive.''')
Greg Claytonb302dff2012-02-01 08:09:32 +0000390
391 __swig_getmethods__["is_running"] = __get_is_running__
Greg Clayton2a94be12012-06-29 22:00:42 +0000392 if _newclass: is_running = property(__get_is_running__, None, doc='''A read only property that returns a boolean value that indicates if this process is currently running.''')
Greg Claytonb302dff2012-02-01 08:09:32 +0000393
394 __swig_getmethods__["is_stopped"] = __get_is_running__
Greg Clayton2a94be12012-06-29 22:00:42 +0000395 if _newclass: is_stopped = property(__get_is_running__, None, doc='''A read only property that returns a boolean value that indicates if this process is currently stopped.''')
Greg Claytonb302dff2012-02-01 08:09:32 +0000396
Greg Clayton1b925202012-01-29 06:07:39 +0000397 __swig_getmethods__["id"] = GetProcessID
Greg Clayton2a94be12012-06-29 22:00:42 +0000398 if _newclass: id = property(GetProcessID, None, doc='''A read only property that returns the process ID as an integer.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000399
400 __swig_getmethods__["target"] = GetTarget
Greg Clayton2a94be12012-06-29 22:00:42 +0000401 if _newclass: target = property(GetTarget, None, doc='''A read only property that an lldb object that represents the target (lldb.SBTarget) that owns this process.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000402
403 __swig_getmethods__["num_threads"] = GetNumThreads
Greg Clayton2a94be12012-06-29 22:00:42 +0000404 if _newclass: num_threads = property(GetNumThreads, None, doc='''A read only property that returns the number of threads in this process as an integer.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000405
406 __swig_getmethods__["selected_thread"] = GetSelectedThread
407 __swig_setmethods__["selected_thread"] = SetSelectedThread
Greg Clayton2a94be12012-06-29 22:00:42 +0000408 if _newclass: selected_thread = property(GetSelectedThread, SetSelectedThread, doc='''A read/write property that gets/sets the currently selected thread in this process. The getter returns a lldb.SBThread object and the setter takes an lldb.SBThread object.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000409
410 __swig_getmethods__["state"] = GetState
Greg Clayton2a94be12012-06-29 22:00:42 +0000411 if _newclass: state = property(GetState, None, doc='''A read only property that returns an lldb enumeration value (see enumerations that start with "lldb.eState") that represents the current state of this process (running, stopped, exited, etc.).''')
Greg Clayton1b925202012-01-29 06:07:39 +0000412
413 __swig_getmethods__["exit_state"] = GetExitStatus
Greg Clayton2a94be12012-06-29 22:00:42 +0000414 if _newclass: exit_state = property(GetExitStatus, None, doc='''A read only property that returns an exit status as an integer of this process when the process state is lldb.eStateExited.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000415
416 __swig_getmethods__["exit_description"] = GetExitDescription
Greg Clayton2a94be12012-06-29 22:00:42 +0000417 if _newclass: exit_description = property(GetExitDescription, None, doc='''A read only property that returns an exit description as a string of this process when the process state is lldb.eStateExited.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000418
419 __swig_getmethods__["broadcaster"] = GetBroadcaster
Greg Clayton2a94be12012-06-29 22:00:42 +0000420 if _newclass: broadcaster = property(GetBroadcaster, None, doc='''A read only property that an lldb object that represents the broadcaster (lldb.SBBroadcaster) for this process.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000421 %}
422
Johnny Chenc3fba812011-07-18 20:13:38 +0000423};
424
425} // namespace lldb