blob: 4efc1359d2474f5c5ea2b651f8e1147b9d0075a2 [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),
46 eBroadcastBitSTDERR = (1 << 3)
47 };
48
49 SBProcess ();
50
51 SBProcess (const lldb::SBProcess& rhs);
52
53 ~SBProcess();
54
Jim Ingham5a15e692012-02-16 06:50:00 +000055 static const char *
56 GetBroadcasterClassName ();
57
Johnny Chenc3fba812011-07-18 20:13:38 +000058 void
59 Clear ();
60
61 bool
62 IsValid() const;
63
64 lldb::SBTarget
65 GetTarget() const;
66
67 lldb::ByteOrder
68 GetByteOrder() const;
69
Johnny Chen23038b62011-11-28 21:39:07 +000070 %feature("autodoc", "
71 Writes data into the current process's stdin. API client specifies a Python
72 string as the only argument.
73 ") PutSTDIN;
Johnny Chenc3fba812011-07-18 20:13:38 +000074 size_t
75 PutSTDIN (const char *src, size_t src_len);
76
Johnny Chen609b9ce2011-11-28 19:12:25 +000077 %feature("autodoc", "
78 Reads data from the current process's stdout stream. API client specifies
79 the size of the buffer to read data into. It returns the byte buffer in a
80 Python string.
81 ") GetSTDOUT;
Johnny Chenc3fba812011-07-18 20:13:38 +000082 size_t
83 GetSTDOUT (char *dst, size_t dst_len) const;
84
Johnny Chen609b9ce2011-11-28 19:12:25 +000085 %feature("autodoc", "
86 Reads data from the current process's stderr stream. API client specifies
87 the size of the buffer to read data into. It returns the byte buffer in a
88 Python string.
89 ") GetSTDERR;
Johnny Chenc3fba812011-07-18 20:13:38 +000090 size_t
91 GetSTDERR (char *dst, size_t dst_len) const;
92
93 void
94 ReportEventState (const lldb::SBEvent &event, FILE *out) const;
95
96 void
97 AppendEventStateReport (const lldb::SBEvent &event, lldb::SBCommandReturnObject &result);
98
99 %feature("docstring", "
100 //------------------------------------------------------------------
101 /// Remote connection related functions. These will fail if the
102 /// process is not in eStateConnected. They are intended for use
103 /// when connecting to an externally managed debugserver instance.
104 //------------------------------------------------------------------
105 ") RemoteAttachToProcessWithID;
106 bool
107 RemoteAttachToProcessWithID (lldb::pid_t pid,
108 lldb::SBError& error);
109
110 %feature("docstring",
111 "See SBTarget.Launch for argument description and usage."
112 ) RemoteLaunch;
113 bool
114 RemoteLaunch (char const **argv,
115 char const **envp,
116 const char *stdin_path,
117 const char *stdout_path,
118 const char *stderr_path,
119 const char *working_directory,
120 uint32_t launch_flags,
121 bool stop_at_entry,
122 lldb::SBError& error);
123
124 //------------------------------------------------------------------
125 // Thread related functions
126 //------------------------------------------------------------------
127 uint32_t
128 GetNumThreads ();
129
130 lldb::SBThread
131 GetThreadAtIndex (size_t index);
132
133 lldb::SBThread
134 GetThreadByID (lldb::tid_t sb_thread_id);
135
136 lldb::SBThread
137 GetSelectedThread () const;
138
139 bool
140 SetSelectedThread (const lldb::SBThread &thread);
141
142 bool
143 SetSelectedThreadByID (uint32_t tid);
144
145 //------------------------------------------------------------------
146 // Stepping related functions
147 //------------------------------------------------------------------
148
149 lldb::StateType
150 GetState ();
151
152 int
153 GetExitStatus ();
154
155 const char *
156 GetExitDescription ();
157
158 lldb::pid_t
159 GetProcessID ();
160
161 uint32_t
162 GetAddressByteSize() const;
163
164 %feature("docstring", "
165 Kills the process and shuts down all threads that were spawned to
166 track and monitor process.
167 ") Destroy;
168 lldb::SBError
169 Destroy ();
170
171 lldb::SBError
172 Continue ();
173
174 lldb::SBError
175 Stop ();
176
177 %feature("docstring", "Same as Destroy(self).") Destroy;
178 lldb::SBError
179 Kill ();
180
181 lldb::SBError
182 Detach ();
183
184 %feature("docstring", "Sends the process a unix signal.") Signal;
185 lldb::SBError
186 Signal (int signal);
187
188 %feature("autodoc", "
189 Reads memory from the current process's address space and removes any
190 traps that may have been inserted into the memory. It returns the byte
191 buffer in a Python string. Example:
192
193 # Read 4 bytes from address 'addr' and assume error.Success() is True.
194 content = process.ReadMemory(addr, 4, error)
195 # Use 'ascii' encoding as each byte of 'content' is within [0..255].
196 new_bytes = bytearray(content, 'ascii')
197 ") ReadMemory;
198 size_t
199 ReadMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
200
201 %feature("autodoc", "
202 Writes memory to the current process's address space and maintains any
203 traps that might be present due to software breakpoints. Example:
204
205 # Create a Python string from the byte array.
206 new_value = str(bytes)
207 result = process.WriteMemory(addr, new_value, error)
208 if not error.Success() or result != len(bytes):
209 print 'SBProcess.WriteMemory() failed!'
210 ") WriteMemory;
211 size_t
212 WriteMemory (addr_t addr, const void *buf, size_t size, lldb::SBError &error);
213
Greg Clayton4a2e3372011-12-15 03:14:23 +0000214 %feature("autodoc", "
215 Reads a NULL terminated C string from the current process's address space.
216 It returns a python string of the exact length, or truncates the string if
217 the maximum character limit is reached. Example:
218
219 # Read a C string of at most 256 bytes from address '0x1000'
220 error = lldb.SBError()
Johnny Chen08413862011-12-15 22:34:59 +0000221 cstring = process.ReadCStringFromMemory(0x1000, 256, error)
Greg Clayton4a2e3372011-12-15 03:14:23 +0000222 if error.Success():
223 print 'cstring: ', cstring
224 else
225 print 'error: ', error
226 ") ReadCStringFromMemory;
227
228 size_t
229 ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error);
230
231 %feature("autodoc", "
232 Reads an unsigned integer from memory given a byte size and an address.
233 Returns the unsigned integer that was read. Example:
234
235 # Read a 4 byte unsigned integer from address 0x1000
236 error = lldb.SBError()
237 uint = ReadUnsignedFromMemory(0x1000, 4, error)
238 if error.Success():
239 print 'integer: %u' % uint
240 else
241 print 'error: ', error
242
243 ") ReadUnsignedFromMemory;
244
245 uint64_t
246 ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error);
247
248 %feature("autodoc", "
249 Reads a pointer from memory from an address and returns the value. Example:
250
251 # Read a pointer from address 0x1000
252 error = lldb.SBError()
253 ptr = ReadPointerFromMemory(0x1000, error)
254 if error.Success():
255 print 'pointer: 0x%x' % ptr
256 else
257 print 'error: ', error
258
259 ") ReadPointerFromMemory;
260
261 lldb::addr_t
262 ReadPointerFromMemory (addr_t addr, lldb::SBError &error);
263
264
Johnny Chenc3fba812011-07-18 20:13:38 +0000265 // Events
266 static lldb::StateType
267 GetStateFromEvent (const lldb::SBEvent &event);
268
269 static bool
270 GetRestartedFromEvent (const lldb::SBEvent &event);
271
272 static lldb::SBProcess
273 GetProcessFromEvent (const lldb::SBEvent &event);
274
Jim Ingham28e23862012-02-08 05:23:15 +0000275 static bool
276 EventIsProcessEvent (const lldb::SBEvent &event);
277
Johnny Chenc3fba812011-07-18 20:13:38 +0000278 lldb::SBBroadcaster
279 GetBroadcaster () const;
280
281 bool
282 GetDescription (lldb::SBStream &description);
283
284 uint32_t
Johnny Chen191343e2012-05-23 22:34:34 +0000285 GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const;
286
287 uint32_t
Johnny Chenc3fba812011-07-18 20:13:38 +0000288 LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error);
289
290 lldb::SBError
291 UnloadImage (uint32_t image_token);
Johnny Chen9f074f02012-01-06 00:46:12 +0000292
Greg Clayton1b925202012-01-29 06:07:39 +0000293 %pythoncode %{
Greg Claytonb302dff2012-02-01 08:09:32 +0000294 def __get_is_alive__(self):
295 '''Returns "True" if the process is currently alive, "False" otherwise'''
296 s = self.GetState()
297 if (s == eStateAttaching or
298 s == eStateLaunching or
299 s == eStateStopped or
300 s == eStateRunning or
301 s == eStateStepping or
302 s == eStateCrashed or
303 s == eStateSuspended):
304 return True
305 return False
306
307 def __get_is_running__(self):
308 '''Returns "True" if the process is currently running, "False" otherwise'''
309 state = self.GetState()
310 if state == eStateRunning or state == eStateStepping:
311 return True
312 return False
313
314 def __get_is_running__(self):
315 '''Returns "True" if the process is currently stopped, "False" otherwise'''
316 state = self.GetState()
317 if state == eStateStopped or state == eStateCrashed or state == eStateSuspended:
318 return True
319 return False
320
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000321 class threads_access(object):
Greg Claytonb302dff2012-02-01 08:09:32 +0000322 '''A helper object that will lazily hand out thread for a process when supplied an index.'''
323 def __init__(self, sbprocess):
324 self.sbprocess = sbprocess
325
326 def __len__(self):
Filipe Cabecinhas3cae38b2012-05-11 20:39:42 +0000327 if self.sbprocess:
328 return int(self.sbprocess.GetNumThreads())
Greg Claytonb302dff2012-02-01 08:09:32 +0000329 return 0
330
331 def __getitem__(self, key):
332 if type(key) is int and key < len(self):
333 return self.sbprocess.GetThreadAtIndex(key)
334 return None
335
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000336 def get_threads_access_object(self):
337 '''An accessor function that returns a modules_access() object which allows lazy thread access from a lldb.SBProcess object.'''
338 return self.threads_access (self)
Greg Claytonb302dff2012-02-01 08:09:32 +0000339
340 def get_process_thread_list(self):
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000341 '''An accessor function that returns a list() that contains all threads in a lldb.SBProcess object.'''
Greg Claytonb302dff2012-02-01 08:09:32 +0000342 threads = []
343 for idx in range(self.GetNumThreads()):
Greg Claytonad502802012-06-27 20:19:56 +0000344 threads.append(self.threads_access(idx))
Greg Claytonb302dff2012-02-01 08:09:32 +0000345 return threads
346
347 __swig_getmethods__["threads"] = get_process_thread_list
Greg Clayton2a94be12012-06-29 22:00:42 +0000348 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 +0000349
Greg Claytonb6a5ba62012-02-03 03:22:53 +0000350 __swig_getmethods__["thread"] = get_threads_access_object
Greg Clayton2a94be12012-06-29 22:00:42 +0000351 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 +0000352
353 __swig_getmethods__["is_alive"] = __get_is_alive__
Greg Clayton2a94be12012-06-29 22:00:42 +0000354 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 +0000355
356 __swig_getmethods__["is_running"] = __get_is_running__
Greg Clayton2a94be12012-06-29 22:00:42 +0000357 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 +0000358
359 __swig_getmethods__["is_stopped"] = __get_is_running__
Greg Clayton2a94be12012-06-29 22:00:42 +0000360 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 +0000361
Greg Clayton1b925202012-01-29 06:07:39 +0000362 __swig_getmethods__["id"] = GetProcessID
Greg Clayton2a94be12012-06-29 22:00:42 +0000363 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 +0000364
365 __swig_getmethods__["target"] = GetTarget
Greg Clayton2a94be12012-06-29 22:00:42 +0000366 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 +0000367
368 __swig_getmethods__["num_threads"] = GetNumThreads
Greg Clayton2a94be12012-06-29 22:00:42 +0000369 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 +0000370
371 __swig_getmethods__["selected_thread"] = GetSelectedThread
372 __swig_setmethods__["selected_thread"] = SetSelectedThread
Greg Clayton2a94be12012-06-29 22:00:42 +0000373 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 +0000374
375 __swig_getmethods__["state"] = GetState
Greg Clayton2a94be12012-06-29 22:00:42 +0000376 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 +0000377
378 __swig_getmethods__["exit_state"] = GetExitStatus
Greg Clayton2a94be12012-06-29 22:00:42 +0000379 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 +0000380
381 __swig_getmethods__["exit_description"] = GetExitDescription
Greg Clayton2a94be12012-06-29 22:00:42 +0000382 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 +0000383
384 __swig_getmethods__["broadcaster"] = GetBroadcaster
Greg Clayton2a94be12012-06-29 22:00:42 +0000385 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 +0000386 %}
387
Johnny Chenc3fba812011-07-18 20:13:38 +0000388};
389
390} // namespace lldb