blob: 684d2aae0aab4a28e242ad6b81c803ff237bc46f [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
Greg Clayton64742742013-01-16 17:29:04 +0000189 %feature("autodoc", "
190 Returns the process ID of the process.
191 ") GetProcessID;
Johnny Chenc3fba812011-07-18 20:13:38 +0000192 lldb::pid_t
193 GetProcessID ();
Greg Clayton64742742013-01-16 17:29:04 +0000194
195 %feature("autodoc", "
196 Returns an integer ID that is guaranteed to be unique across all process instances. This is not the process ID, just a unique integer for comparison and caching purposes.
197 ") GetUniqueID;
198 uint32_t
199 GetUniqueID();
Johnny Chenc3fba812011-07-18 20:13:38 +0000200
201 uint32_t
202 GetAddressByteSize() const;
203
204 %feature("docstring", "
205 Kills the process and shuts down all threads that were spawned to
206 track and monitor process.
207 ") Destroy;
208 lldb::SBError
209 Destroy ();
210
211 lldb::SBError
212 Continue ();
213
214 lldb::SBError
215 Stop ();
216
217 %feature("docstring", "Same as Destroy(self).") Destroy;
218 lldb::SBError
219 Kill ();
220
221 lldb::SBError
222 Detach ();
223
224 %feature("docstring", "Sends the process a unix signal.") Signal;
225 lldb::SBError
226 Signal (int signal);
227
Jim Ingham0e3b98e2013-01-08 23:22:42 +0000228 %feature("docstring", "
229 Returns a stop id that will increase every time the process executes. If
230 include_expression_stops is true, then stops caused by expression evaluation
231 will cause the returned value to increase, otherwise the counter returned will
232 only increase when execution is continued explicitly by the user. Note, the value
233 will always increase, but may increase by more than one per stop.
234 ") GetStopID;
235 uint32_t
236 GetStopID(bool include_expression_stops = false);
237
Jim Ingham5d90ade2012-07-27 23:57:19 +0000238 void
239 SendAsyncInterrupt();
240
Johnny Chenc3fba812011-07-18 20:13:38 +0000241 %feature("autodoc", "
242 Reads memory from the current process's address space and removes any
243 traps that may have been inserted into the memory. It returns the byte
244 buffer in a Python string. Example:
245
246 # Read 4 bytes from address 'addr' and assume error.Success() is True.
247 content = process.ReadMemory(addr, 4, error)
248 # Use 'ascii' encoding as each byte of 'content' is within [0..255].
249 new_bytes = bytearray(content, 'ascii')
250 ") ReadMemory;
251 size_t
252 ReadMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
253
254 %feature("autodoc", "
255 Writes memory to the current process's address space and maintains any
256 traps that might be present due to software breakpoints. Example:
257
258 # Create a Python string from the byte array.
259 new_value = str(bytes)
260 result = process.WriteMemory(addr, new_value, error)
261 if not error.Success() or result != len(bytes):
262 print 'SBProcess.WriteMemory() failed!'
263 ") WriteMemory;
264 size_t
265 WriteMemory (addr_t addr, const void *buf, size_t size, lldb::SBError &error);
266
Greg Clayton4a2e3372011-12-15 03:14:23 +0000267 %feature("autodoc", "
268 Reads a NULL terminated C string from the current process's address space.
269 It returns a python string of the exact length, or truncates the string if
270 the maximum character limit is reached. Example:
271
272 # Read a C string of at most 256 bytes from address '0x1000'
273 error = lldb.SBError()
Johnny Chen08413862011-12-15 22:34:59 +0000274 cstring = process.ReadCStringFromMemory(0x1000, 256, error)
Greg Clayton4a2e3372011-12-15 03:14:23 +0000275 if error.Success():
276 print 'cstring: ', cstring
277 else
278 print 'error: ', error
279 ") ReadCStringFromMemory;
280
281 size_t
282 ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
283
284 %feature("autodoc", "
285 Reads an unsigned integer from memory given a byte size and an address.
286 Returns the unsigned integer that was read. Example:
287
288 # Read a 4 byte unsigned integer from address 0x1000
289 error = lldb.SBError()
290 uint = ReadUnsignedFromMemory(0x1000, 4, error)
291 if error.Success():
292 print 'integer: %u' % uint
293 else
294 print 'error: ', error
295
296 ") ReadUnsignedFromMemory;
297
298 uint64_t
299 ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error);
300
301 %feature("autodoc", "
302 Reads a pointer from memory from an address and returns the value. Example:
303
304 # Read a pointer from address 0x1000
305 error = lldb.SBError()
306 ptr = ReadPointerFromMemory(0x1000, error)
307 if error.Success():
308 print 'pointer: 0x%x' % ptr
309 else
310 print 'error: ', error
311
312 ") ReadPointerFromMemory;
313
314 lldb::addr_t
315 ReadPointerFromMemory (addr_t addr, lldb::SBError &error);
316
317
Johnny Chenc3fba812011-07-18 20:13:38 +0000318 // Events
319 static lldb::StateType
320 GetStateFromEvent (const lldb::SBEvent &event);
321
322 static bool
323 GetRestartedFromEvent (const lldb::SBEvent &event);
324
325 static lldb::SBProcess
326 GetProcessFromEvent (const lldb::SBEvent &event);
327
Jim Ingham28e23862012-02-08 05:23:15 +0000328 static bool
329 EventIsProcessEvent (const lldb::SBEvent &event);
330
Johnny Chenc3fba812011-07-18 20:13:38 +0000331 lldb::SBBroadcaster
332 GetBroadcaster () const;
333
334 bool
335 GetDescription (lldb::SBStream &description);
336
337 uint32_t
Johnny Chen191343e2012-05-23 22:34:34 +0000338 GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const;
339
340 uint32_t
Johnny Chenc3fba812011-07-18 20:13:38 +0000341 LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error);
342
343 lldb::SBError
344 UnloadImage (uint32_t image_token);
Johnny Chen9f074f02012-01-06 00:46:12 +0000345
Greg Clayton1b925202012-01-29 06:07:39 +0000346 %pythoncode %{
Greg Claytonb302dff2012-02-01 08:09:32 +0000347 def __get_is_alive__(self):
348 '''Returns "True" if the process is currently alive, "False" otherwise'''
349 s = self.GetState()
350 if (s == eStateAttaching or
351 s == eStateLaunching or
352 s == eStateStopped or
353 s == eStateRunning or
354 s == eStateStepping or
355 s == eStateCrashed or
356 s == eStateSuspended):
357 return True
358 return False
359
360 def __get_is_running__(self):
361 '''Returns "True" if the process is currently running, "False" otherwise'''
362 state = self.GetState()
363 if state == eStateRunning or state == eStateStepping:
364 return True
365 return False
366
367 def __get_is_running__(self):
368 '''Returns "True" if the process is currently stopped, "False" otherwise'''
369 state = self.GetState()
370 if state == eStateStopped or state == eStateCrashed or state == eStateSuspended:
371 return True
372 return False
373
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000374 class threads_access(object):
Greg Claytonb302dff2012-02-01 08:09:32 +0000375 '''A helper object that will lazily hand out thread for a process when supplied an index.'''
376 def __init__(self, sbprocess):
377 self.sbprocess = sbprocess
378
379 def __len__(self):
Filipe Cabecinhas3cae38b2012-05-11 20:39:42 +0000380 if self.sbprocess:
381 return int(self.sbprocess.GetNumThreads())
Greg Claytonb302dff2012-02-01 08:09:32 +0000382 return 0
383
384 def __getitem__(self, key):
385 if type(key) is int and key < len(self):
386 return self.sbprocess.GetThreadAtIndex(key)
387 return None
388
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000389 def get_threads_access_object(self):
390 '''An accessor function that returns a modules_access() object which allows lazy thread access from a lldb.SBProcess object.'''
391 return self.threads_access (self)
Greg Claytonb302dff2012-02-01 08:09:32 +0000392
393 def get_process_thread_list(self):
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000394 '''An accessor function that returns a list() that contains all threads in a lldb.SBProcess object.'''
Greg Claytonb302dff2012-02-01 08:09:32 +0000395 threads = []
Enrico Granata2cb02032012-10-08 19:06:11 +0000396 accessor = self.get_threads_access_object()
397 for idx in range(len(accessor)):
398 threads.append(accessor[idx])
Greg Claytonb302dff2012-02-01 08:09:32 +0000399 return threads
400
401 __swig_getmethods__["threads"] = get_process_thread_list
Greg Clayton2a94be12012-06-29 22:00:42 +0000402 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 +0000403
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000404 __swig_getmethods__["thread"] = get_threads_access_object
Greg Clayton2a94be12012-06-29 22:00:42 +0000405 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 +0000406
407 __swig_getmethods__["is_alive"] = __get_is_alive__
Greg Clayton2a94be12012-06-29 22:00:42 +0000408 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 +0000409
410 __swig_getmethods__["is_running"] = __get_is_running__
Greg Clayton2a94be12012-06-29 22:00:42 +0000411 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 +0000412
413 __swig_getmethods__["is_stopped"] = __get_is_running__
Greg Clayton2a94be12012-06-29 22:00:42 +0000414 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 +0000415
Greg Clayton1b925202012-01-29 06:07:39 +0000416 __swig_getmethods__["id"] = GetProcessID
Greg Clayton2a94be12012-06-29 22:00:42 +0000417 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 +0000418
419 __swig_getmethods__["target"] = GetTarget
Greg Clayton2a94be12012-06-29 22:00:42 +0000420 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 +0000421
422 __swig_getmethods__["num_threads"] = GetNumThreads
Greg Clayton2a94be12012-06-29 22:00:42 +0000423 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 +0000424
425 __swig_getmethods__["selected_thread"] = GetSelectedThread
426 __swig_setmethods__["selected_thread"] = SetSelectedThread
Greg Clayton2a94be12012-06-29 22:00:42 +0000427 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 +0000428
429 __swig_getmethods__["state"] = GetState
Greg Clayton2a94be12012-06-29 22:00:42 +0000430 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 +0000431
432 __swig_getmethods__["exit_state"] = GetExitStatus
Greg Clayton2a94be12012-06-29 22:00:42 +0000433 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 +0000434
435 __swig_getmethods__["exit_description"] = GetExitDescription
Greg Clayton2a94be12012-06-29 22:00:42 +0000436 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 +0000437
438 __swig_getmethods__["broadcaster"] = GetBroadcaster
Greg Clayton2a94be12012-06-29 22:00:42 +0000439 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 +0000440 %}
441
Johnny Chenc3fba812011-07-18 20:13:38 +0000442};
443
444} // namespace lldb