1 //===-- 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 10 namespace lldb { 11 12 %feature("docstring", 13 "Represents the process associated with the target program. 14 15 SBProcess supports thread iteration. For example (from test/lldbutil.py), 16 17 # ================================================== 18 # Utility functions related to Threads and Processes 19 # ================================================== 20 21 def 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; 35 class SBProcess 36 { 37 public: 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 eBroadcastBitProfileData = (1 << 4) 48 }; 49 50 SBProcess (); 51 52 SBProcess (const lldb::SBProcess& rhs); 53 54 ~SBProcess(); 55 56 static const char * 57 GetBroadcasterClassName (); 58 59 const char * 60 GetPluginName (); 61 62 const char * 63 GetShortPluginName (); 64 65 void 66 Clear (); 67 68 bool 69 IsValid() const; 70 71 lldb::SBTarget 72 GetTarget() const; 73 74 lldb::ByteOrder 75 GetByteOrder() const; 76 77 %feature("autodoc", " 78 Writes data into the current process's stdin. API client specifies a Python 79 string as the only argument. 80 ") PutSTDIN; 81 size_t 82 PutSTDIN (const char *src, size_t src_len); 83 84 %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; 89 size_t 90 GetSTDOUT (char *dst, size_t dst_len) const; 91 92 %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; 97 size_t 98 GetSTDERR (char *dst, size_t dst_len) const; 99 100 size_t 101 GetAsyncProfileData(char *dst, size_t dst_len) const; 102 103 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 140 %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; 146 lldb::SBThread 147 GetThreadAtIndex (size_t index); 148 149 %feature("autodoc", " 150 Returns the thread with the given thread ID. 151 ") GetThreadByID; 152 lldb::SBThread 153 GetThreadByID (lldb::tid_t sb_thread_id); 154 155 %feature("autodoc", " 156 Returns the thread with the given thread IndexID. 157 ") GetThreadByIndexID; 158 lldb::SBThread 159 GetThreadByIndexID (uint32_t index_id); 160 161 %feature("autodoc", " 162 Returns the currently selected thread. 163 ") GetSelectedThread; 164 lldb::SBThread 165 GetSelectedThread () const; 166 167 %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 173 bool 174 SetSelectedThread (const lldb::SBThread &thread); 175 176 bool 177 SetSelectedThreadByID (lldb::tid_t tid); 178 179 bool 180 SetSelectedThreadByIndexID (uint32_t index_id); 181 182 //------------------------------------------------------------------ 183 // Stepping related functions 184 //------------------------------------------------------------------ 185 186 lldb::StateType 187 GetState (); 188 189 int 190 GetExitStatus (); 191 192 const char * 193 GetExitDescription (); 194 195 %feature("autodoc", " 196 Returns the process ID of the process. 197 ") GetProcessID; 198 lldb::pid_t 199 GetProcessID (); 200 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(); 206 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 234 %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 244 void 245 SendAsyncInterrupt(); 246 247 %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 273 %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() 280 cstring = process.ReadCStringFromMemory(0x1000, 256, error) 281 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 324 // Events 325 static lldb::StateType 326 GetStateFromEvent (const lldb::SBEvent &event); 327 328 static bool 329 GetRestartedFromEvent (const lldb::SBEvent &event); 330 331 static size_t 332 GetNumRestartedReasonsFromEvent (const lldb::SBEvent &event); 333 334 static const char * 335 GetRestartedReasonAtIndexFromEvent (const lldb::SBEvent &event, size_t idx); 336 337 static lldb::SBProcess 338 GetProcessFromEvent (const lldb::SBEvent &event); 339 340 static bool 341 EventIsProcessEvent (const lldb::SBEvent &event); 342 343 lldb::SBBroadcaster 344 GetBroadcaster () const; 345 346 bool 347 GetDescription (lldb::SBStream &description); 348 349 uint32_t 350 GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const; 351 352 uint32_t 353 LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error); 354 355 lldb::SBError 356 UnloadImage (uint32_t image_token); 357 358 %pythoncode %{ 359 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 386 class threads_access(object): 387 '''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): 392 if self.sbprocess: 393 return int(self.sbprocess.GetNumThreads()) 394 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 401 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) 404 405 def get_process_thread_list(self): 406 '''An accessor function that returns a list() that contains all threads in a lldb.SBProcess object.''' 407 threads = [] 408 accessor = self.get_threads_access_object() 409 for idx in range(len(accessor)): 410 threads.append(accessor[idx]) 411 return threads 412 413 __swig_getmethods__["threads"] = get_process_thread_list 414 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.''') 415 416 __swig_getmethods__["thread"] = get_threads_access_object 417 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]).''') 418 419 __swig_getmethods__["is_alive"] = __get_is_alive__ 420 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.''') 421 422 __swig_getmethods__["is_running"] = __get_is_running__ 423 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.''') 424 425 __swig_getmethods__["is_stopped"] = __get_is_running__ 426 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.''') 427 428 __swig_getmethods__["id"] = GetProcessID 429 if _newclass: id = property(GetProcessID, None, doc='''A read only property that returns the process ID as an integer.''') 430 431 __swig_getmethods__["target"] = GetTarget 432 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.''') 433 434 __swig_getmethods__["num_threads"] = GetNumThreads 435 if _newclass: num_threads = property(GetNumThreads, None, doc='''A read only property that returns the number of threads in this process as an integer.''') 436 437 __swig_getmethods__["selected_thread"] = GetSelectedThread 438 __swig_setmethods__["selected_thread"] = SetSelectedThread 439 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.''') 440 441 __swig_getmethods__["state"] = GetState 442 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.).''') 443 444 __swig_getmethods__["exit_state"] = GetExitStatus 445 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.''') 446 447 __swig_getmethods__["exit_description"] = GetExitDescription 448 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.''') 449 450 __swig_getmethods__["broadcaster"] = GetBroadcaster 451 if _newclass: broadcaster = property(GetBroadcaster, None, doc='''A read only property that an lldb object that represents the broadcaster (lldb.SBBroadcaster) for this process.''') 452 %} 453 454 }; 455 456 } // namespace lldb 457