blob: 6f22d9ad1dc6fe2c9f5fa65ad4a0147dcc21dffd [file] [log] [blame]
Johnny Chen357033b2011-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 Ongab3b8b22012-11-17 00:21:04 +000046 eBroadcastBitSTDERR = (1 << 3),
47 eBroadcastBitProfileData = (1 << 4)
Johnny Chen357033b2011-07-18 20:13:38 +000048 };
49
50 SBProcess ();
51
52 SBProcess (const lldb::SBProcess& rhs);
53
54 ~SBProcess();
55
Jim Ingham4bddaeb2012-02-16 06:50:00 +000056 static const char *
57 GetBroadcasterClassName ();
58
Jim Inghamd7b30ef2012-10-26 19:18:04 +000059 const char *
60 GetPluginName ();
61
62 const char *
63 GetShortPluginName ();
64
Johnny Chen357033b2011-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 Chen49cb85d2011-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 Chen357033b2011-07-18 20:13:38 +000081 size_t
82 PutSTDIN (const char *src, size_t src_len);
83
Johnny Chend80e5e92011-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 Chen357033b2011-07-18 20:13:38 +000089 size_t
90 GetSTDOUT (char *dst, size_t dst_len) const;
91
Johnny Chend80e5e92011-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 Chen357033b2011-07-18 20:13:38 +000097 size_t
98 GetSTDERR (char *dst, size_t dst_len) const;
99
Han Ming Ongab3b8b22012-11-17 00:21:04 +0000100 size_t
101 GetAsyncProfileData(char *dst, size_t dst_len) const;
102
Johnny Chen357033b2011-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 Ingham18b46892012-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 Chen357033b2011-07-18 20:13:38 +0000146 lldb::SBThread
147 GetThreadAtIndex (size_t index);
148
Jim Ingham18b46892012-07-13 20:18:18 +0000149 %feature("autodoc", "
150 Returns the thread with the given thread ID.
151 ") GetThreadByID;
Johnny Chen357033b2011-07-18 20:13:38 +0000152 lldb::SBThread
153 GetThreadByID (lldb::tid_t sb_thread_id);
Jim Ingham18b46892012-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 Chen357033b2011-07-18 20:13:38 +0000160
Jim Ingham18b46892012-07-13 20:18:18 +0000161 %feature("autodoc", "
162 Returns the currently selected thread.
163 ") GetSelectedThread;
Johnny Chen357033b2011-07-18 20:13:38 +0000164 lldb::SBThread
165 GetSelectedThread () const;
166
Greg Claytona4d87472013-01-18 23:41:08 +0000167 %feature("autodoc", "
168 Lazily create a thread on demand through the current OperatingSystem plug-in, if the current OperatingSystem plug-in supports it.
169 ") CreateOSPluginThread;
170 lldb::SBThread
171 CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context);
172
Johnny Chen357033b2011-07-18 20:13:38 +0000173 bool
174 SetSelectedThread (const lldb::SBThread &thread);
175
176 bool
Greg Claytonea561dc2012-10-12 23:32:11 +0000177 SetSelectedThreadByID (lldb::tid_t tid);
Johnny Chen357033b2011-07-18 20:13:38 +0000178
Jim Ingham18b46892012-07-13 20:18:18 +0000179 bool
180 SetSelectedThreadByIndexID (uint32_t index_id);
181
Johnny Chen357033b2011-07-18 20:13:38 +0000182 //------------------------------------------------------------------
183 // Stepping related functions
184 //------------------------------------------------------------------
185
186 lldb::StateType
187 GetState ();
188
189 int
190 GetExitStatus ();
191
192 const char *
193 GetExitDescription ();
194
Greg Clayton949e8222013-01-16 17:29:04 +0000195 %feature("autodoc", "
196 Returns the process ID of the process.
197 ") GetProcessID;
Johnny Chen357033b2011-07-18 20:13:38 +0000198 lldb::pid_t
199 GetProcessID ();
Greg Clayton949e8222013-01-16 17:29:04 +0000200
201 %feature("autodoc", "
202 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.
203 ") GetUniqueID;
204 uint32_t
205 GetUniqueID();
Johnny Chen357033b2011-07-18 20:13:38 +0000206
207 uint32_t
208 GetAddressByteSize() const;
209
210 %feature("docstring", "
211 Kills the process and shuts down all threads that were spawned to
212 track and monitor process.
213 ") Destroy;
214 lldb::SBError
215 Destroy ();
216
217 lldb::SBError
218 Continue ();
219
220 lldb::SBError
221 Stop ();
222
223 %feature("docstring", "Same as Destroy(self).") Destroy;
224 lldb::SBError
225 Kill ();
226
227 lldb::SBError
228 Detach ();
229
230 %feature("docstring", "Sends the process a unix signal.") Signal;
231 lldb::SBError
232 Signal (int signal);
233
Jim Inghambf2956a22013-01-08 23:22:42 +0000234 %feature("docstring", "
235 Returns a stop id that will increase every time the process executes. If
236 include_expression_stops is true, then stops caused by expression evaluation
237 will cause the returned value to increase, otherwise the counter returned will
238 only increase when execution is continued explicitly by the user. Note, the value
239 will always increase, but may increase by more than one per stop.
240 ") GetStopID;
241 uint32_t
242 GetStopID(bool include_expression_stops = false);
243
Jim Inghamcfc09352012-07-27 23:57:19 +0000244 void
245 SendAsyncInterrupt();
246
Johnny Chen357033b2011-07-18 20:13:38 +0000247 %feature("autodoc", "
248 Reads memory from the current process's address space and removes any
249 traps that may have been inserted into the memory. It returns the byte
250 buffer in a Python string. Example:
251
252 # Read 4 bytes from address 'addr' and assume error.Success() is True.
253 content = process.ReadMemory(addr, 4, error)
254 # Use 'ascii' encoding as each byte of 'content' is within [0..255].
255 new_bytes = bytearray(content, 'ascii')
256 ") ReadMemory;
257 size_t
258 ReadMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
259
260 %feature("autodoc", "
261 Writes memory to the current process's address space and maintains any
262 traps that might be present due to software breakpoints. Example:
263
264 # Create a Python string from the byte array.
265 new_value = str(bytes)
266 result = process.WriteMemory(addr, new_value, error)
267 if not error.Success() or result != len(bytes):
268 print 'SBProcess.WriteMemory() failed!'
269 ") WriteMemory;
270 size_t
271 WriteMemory (addr_t addr, const void *buf, size_t size, lldb::SBError &error);
272
Greg Claytone91b7952011-12-15 03:14:23 +0000273 %feature("autodoc", "
274 Reads a NULL terminated C string from the current process's address space.
275 It returns a python string of the exact length, or truncates the string if
276 the maximum character limit is reached. Example:
277
278 # Read a C string of at most 256 bytes from address '0x1000'
279 error = lldb.SBError()
Johnny Chen80e3e842011-12-15 22:34:59 +0000280 cstring = process.ReadCStringFromMemory(0x1000, 256, error)
Greg Claytone91b7952011-12-15 03:14:23 +0000281 if error.Success():
282 print 'cstring: ', cstring
283 else
284 print 'error: ', error
285 ") ReadCStringFromMemory;
286
287 size_t
288 ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
289
290 %feature("autodoc", "
291 Reads an unsigned integer from memory given a byte size and an address.
292 Returns the unsigned integer that was read. Example:
293
294 # Read a 4 byte unsigned integer from address 0x1000
295 error = lldb.SBError()
296 uint = ReadUnsignedFromMemory(0x1000, 4, error)
297 if error.Success():
298 print 'integer: %u' % uint
299 else
300 print 'error: ', error
301
302 ") ReadUnsignedFromMemory;
303
304 uint64_t
305 ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error);
306
307 %feature("autodoc", "
308 Reads a pointer from memory from an address and returns the value. Example:
309
310 # Read a pointer from address 0x1000
311 error = lldb.SBError()
312 ptr = ReadPointerFromMemory(0x1000, error)
313 if error.Success():
314 print 'pointer: 0x%x' % ptr
315 else
316 print 'error: ', error
317
318 ") ReadPointerFromMemory;
319
320 lldb::addr_t
321 ReadPointerFromMemory (addr_t addr, lldb::SBError &error);
322
323
Johnny Chen357033b2011-07-18 20:13:38 +0000324 // Events
325 static lldb::StateType
326 GetStateFromEvent (const lldb::SBEvent &event);
327
328 static bool
329 GetRestartedFromEvent (const lldb::SBEvent &event);
330
Jim Ingham0161b492013-02-09 01:29:05 +0000331 static size_t
332 GetNumRestartedReasonsFromEvent (const lldb::SBEvent &event);
333
334 static const char *
335 GetRestartedReasonAtIndexFromEvent (const lldb::SBEvent &event, size_t idx);
336
Johnny Chen357033b2011-07-18 20:13:38 +0000337 static lldb::SBProcess
338 GetProcessFromEvent (const lldb::SBEvent &event);
339
Jim Inghame6bc6cb2012-02-08 05:23:15 +0000340 static bool
341 EventIsProcessEvent (const lldb::SBEvent &event);
342
Johnny Chen357033b2011-07-18 20:13:38 +0000343 lldb::SBBroadcaster
344 GetBroadcaster () const;
345
346 bool
347 GetDescription (lldb::SBStream &description);
348
349 uint32_t
Johnny Chenf9ef60d2012-05-23 22:34:34 +0000350 GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const;
351
352 uint32_t
Johnny Chen357033b2011-07-18 20:13:38 +0000353 LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error);
354
355 lldb::SBError
356 UnloadImage (uint32_t image_token);
Johnny Chen39c6d0f2012-01-06 00:46:12 +0000357
Greg Clayton13d19502012-01-29 06:07:39 +0000358 %pythoncode %{
Greg Clayton6b2bd932012-02-01 08:09:32 +0000359 def __get_is_alive__(self):
360 '''Returns "True" if the process is currently alive, "False" otherwise'''
361 s = self.GetState()
362 if (s == eStateAttaching or
363 s == eStateLaunching or
364 s == eStateStopped or
365 s == eStateRunning or
366 s == eStateStepping or
367 s == eStateCrashed or
368 s == eStateSuspended):
369 return True
370 return False
371
372 def __get_is_running__(self):
373 '''Returns "True" if the process is currently running, "False" otherwise'''
374 state = self.GetState()
375 if state == eStateRunning or state == eStateStepping:
376 return True
377 return False
378
379 def __get_is_running__(self):
380 '''Returns "True" if the process is currently stopped, "False" otherwise'''
381 state = self.GetState()
382 if state == eStateStopped or state == eStateCrashed or state == eStateSuspended:
383 return True
384 return False
385
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000386 class threads_access(object):
Greg Clayton6b2bd932012-02-01 08:09:32 +0000387 '''A helper object that will lazily hand out thread for a process when supplied an index.'''
388 def __init__(self, sbprocess):
389 self.sbprocess = sbprocess
390
391 def __len__(self):
Filipe Cabecinhas1a96ef82012-05-11 20:39:42 +0000392 if self.sbprocess:
393 return int(self.sbprocess.GetNumThreads())
Greg Clayton6b2bd932012-02-01 08:09:32 +0000394 return 0
395
396 def __getitem__(self, key):
397 if type(key) is int and key < len(self):
398 return self.sbprocess.GetThreadAtIndex(key)
399 return None
400
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000401 def get_threads_access_object(self):
402 '''An accessor function that returns a modules_access() object which allows lazy thread access from a lldb.SBProcess object.'''
403 return self.threads_access (self)
Greg Clayton6b2bd932012-02-01 08:09:32 +0000404
405 def get_process_thread_list(self):
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000406 '''An accessor function that returns a list() that contains all threads in a lldb.SBProcess object.'''
Greg Clayton6b2bd932012-02-01 08:09:32 +0000407 threads = []
Enrico Granatabeea93c2012-10-08 19:06:11 +0000408 accessor = self.get_threads_access_object()
409 for idx in range(len(accessor)):
410 threads.append(accessor[idx])
Greg Clayton6b2bd932012-02-01 08:09:32 +0000411 return threads
412
413 __swig_getmethods__["threads"] = get_process_thread_list
Greg Clayton5ef31a92012-06-29 22:00:42 +0000414 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 Clayton6b2bd932012-02-01 08:09:32 +0000415
Greg Claytonb62bb8c2012-02-03 03:22:53 +0000416 __swig_getmethods__["thread"] = get_threads_access_object
Greg Clayton5ef31a92012-06-29 22:00:42 +0000417 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 Clayton6b2bd932012-02-01 08:09:32 +0000418
419 __swig_getmethods__["is_alive"] = __get_is_alive__
Greg Clayton5ef31a92012-06-29 22:00:42 +0000420 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 Clayton6b2bd932012-02-01 08:09:32 +0000421
422 __swig_getmethods__["is_running"] = __get_is_running__
Greg Clayton5ef31a92012-06-29 22:00:42 +0000423 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 Clayton6b2bd932012-02-01 08:09:32 +0000424
425 __swig_getmethods__["is_stopped"] = __get_is_running__
Greg Clayton5ef31a92012-06-29 22:00:42 +0000426 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 Clayton6b2bd932012-02-01 08:09:32 +0000427
Greg Clayton13d19502012-01-29 06:07:39 +0000428 __swig_getmethods__["id"] = GetProcessID
Greg Clayton5ef31a92012-06-29 22:00:42 +0000429 if _newclass: id = property(GetProcessID, None, doc='''A read only property that returns the process ID as an integer.''')
Greg Clayton13d19502012-01-29 06:07:39 +0000430
431 __swig_getmethods__["target"] = GetTarget
Greg Clayton5ef31a92012-06-29 22:00:42 +0000432 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 Clayton13d19502012-01-29 06:07:39 +0000433
434 __swig_getmethods__["num_threads"] = GetNumThreads
Greg Clayton5ef31a92012-06-29 22:00:42 +0000435 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 Clayton13d19502012-01-29 06:07:39 +0000436
437 __swig_getmethods__["selected_thread"] = GetSelectedThread
438 __swig_setmethods__["selected_thread"] = SetSelectedThread
Greg Clayton5ef31a92012-06-29 22:00:42 +0000439 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 Clayton13d19502012-01-29 06:07:39 +0000440
441 __swig_getmethods__["state"] = GetState
Greg Clayton5ef31a92012-06-29 22:00:42 +0000442 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 Clayton13d19502012-01-29 06:07:39 +0000443
444 __swig_getmethods__["exit_state"] = GetExitStatus
Greg Clayton5ef31a92012-06-29 22:00:42 +0000445 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 Clayton13d19502012-01-29 06:07:39 +0000446
447 __swig_getmethods__["exit_description"] = GetExitDescription
Greg Clayton5ef31a92012-06-29 22:00:42 +0000448 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 Clayton13d19502012-01-29 06:07:39 +0000449
450 __swig_getmethods__["broadcaster"] = GetBroadcaster
Greg Clayton5ef31a92012-06-29 22:00:42 +0000451 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 Clayton13d19502012-01-29 06:07:39 +0000452 %}
453
Johnny Chen357033b2011-07-18 20:13:38 +0000454};
455
456} // namespace lldb