SBProcess.h revision 269024
1//===-- SBProcess.h ---------------------------------------------*- 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#ifndef LLDB_SBProcess_h_ 11#define LLDB_SBProcess_h_ 12 13#include "lldb/API/SBDefines.h" 14#include "lldb/API/SBError.h" 15#include "lldb/API/SBTarget.h" 16#include "lldb/API/SBQueue.h" 17#include <stdio.h> 18 19namespace lldb { 20 21class SBEvent; 22 23class SBProcess 24{ 25public: 26 //------------------------------------------------------------------ 27 /// Broadcaster event bits definitions. 28 //------------------------------------------------------------------ 29 enum 30 { 31 eBroadcastBitStateChanged = (1 << 0), 32 eBroadcastBitInterrupt = (1 << 1), 33 eBroadcastBitSTDOUT = (1 << 2), 34 eBroadcastBitSTDERR = (1 << 3), 35 eBroadcastBitProfileData = (1 << 4) 36 }; 37 38 SBProcess (); 39 40 SBProcess (const lldb::SBProcess& rhs); 41 42 const lldb::SBProcess& 43 operator = (const lldb::SBProcess& rhs); 44 45 SBProcess (const lldb::ProcessSP &process_sp); 46 47 ~SBProcess(); 48 49 static const char * 50 GetBroadcasterClassName (); 51 52 const char * 53 GetPluginName (); 54 55 // DEPRECATED: use GetPluginName() 56 const char * 57 GetShortPluginName (); 58 59 void 60 Clear (); 61 62 bool 63 IsValid() const; 64 65 lldb::SBTarget 66 GetTarget() const; 67 68 lldb::ByteOrder 69 GetByteOrder() const; 70 71 size_t 72 PutSTDIN (const char *src, size_t src_len); 73 74 size_t 75 GetSTDOUT (char *dst, size_t dst_len) const; 76 77 size_t 78 GetSTDERR (char *dst, size_t dst_len) const; 79 80 size_t 81 GetAsyncProfileData(char *dst, size_t dst_len) const; 82 83 void 84 ReportEventState (const lldb::SBEvent &event, FILE *out) const; 85 86 void 87 AppendEventStateReport (const lldb::SBEvent &event, lldb::SBCommandReturnObject &result); 88 89 //------------------------------------------------------------------ 90 /// Remote connection related functions. These will fail if the 91 /// process is not in eStateConnected. They are intended for use 92 /// when connecting to an externally managed debugserver instance. 93 //------------------------------------------------------------------ 94 bool 95 RemoteAttachToProcessWithID (lldb::pid_t pid, 96 lldb::SBError& error); 97 98 bool 99 RemoteLaunch (char const **argv, 100 char const **envp, 101 const char *stdin_path, 102 const char *stdout_path, 103 const char *stderr_path, 104 const char *working_directory, 105 uint32_t launch_flags, 106 bool stop_at_entry, 107 lldb::SBError& error); 108 109 //------------------------------------------------------------------ 110 // Thread related functions 111 //------------------------------------------------------------------ 112 uint32_t 113 GetNumThreads (); 114 115 lldb::SBThread 116 GetThreadAtIndex (size_t index); 117 118 lldb::SBThread 119 GetThreadByID (lldb::tid_t sb_thread_id); 120 121 lldb::SBThread 122 GetThreadByIndexID (uint32_t index_id); 123 124 lldb::SBThread 125 GetSelectedThread () const; 126 127 //------------------------------------------------------------------ 128 // Function for lazily creating a thread using the current OS 129 // plug-in. This function will be removed in the future when there 130 // are APIs to create SBThread objects through the interface and add 131 // them to the process through the SBProcess API. 132 //------------------------------------------------------------------ 133 lldb::SBThread 134 CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context); 135 136 bool 137 SetSelectedThread (const lldb::SBThread &thread); 138 139 bool 140 SetSelectedThreadByID (lldb::tid_t tid); 141 142 bool 143 SetSelectedThreadByIndexID (uint32_t index_id); 144 145 //------------------------------------------------------------------ 146 // Queue related functions 147 //------------------------------------------------------------------ 148 uint32_t 149 GetNumQueues (); 150 151 lldb::SBQueue 152 GetQueueAtIndex (size_t index); 153 154 //------------------------------------------------------------------ 155 // Stepping related functions 156 //------------------------------------------------------------------ 157 158 lldb::StateType 159 GetState (); 160 161 int 162 GetExitStatus (); 163 164 const char * 165 GetExitDescription (); 166 167 //------------------------------------------------------------------ 168 /// Gets the process ID 169 /// 170 /// Returns the process identifier for the process as it is known 171 /// on the system on which the process is running. For unix systems 172 /// this is typically the same as if you called "getpid()" in the 173 /// process. 174 /// 175 /// @return 176 /// Returns LLDB_INVALID_PROCESS_ID if this object does not 177 /// contain a valid process object, or if the process has not 178 /// been launched. Returns a valid process ID if the process is 179 /// valid. 180 //------------------------------------------------------------------ 181 lldb::pid_t 182 GetProcessID (); 183 184 //------------------------------------------------------------------ 185 /// Gets the unique ID associated with this process object 186 /// 187 /// Unique IDs start at 1 and increment up with each new process 188 /// instance. Since starting a process on a system might always 189 /// create a process with the same process ID, there needs to be a 190 /// way to tell two process instances apart. 191 /// 192 /// @return 193 /// Returns a non-zero integer ID if this object contains a 194 /// valid process object, zero if this object does not contain 195 /// a valid process object. 196 //------------------------------------------------------------------ 197 uint32_t 198 GetUniqueID(); 199 200 uint32_t 201 GetAddressByteSize() const; 202 203 lldb::SBError 204 Destroy (); 205 206 lldb::SBError 207 Continue (); 208 209 lldb::SBError 210 Stop (); 211 212 lldb::SBError 213 Kill (); 214 215 lldb::SBError 216 Detach (); 217 218 lldb::SBError 219 Detach (bool keep_stopped); 220 221 lldb::SBError 222 Signal (int signal); 223 224 void 225 SendAsyncInterrupt(); 226 227 uint32_t 228 GetStopID(bool include_expression_stops = false); 229 230 size_t 231 ReadMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error); 232 233 size_t 234 WriteMemory (addr_t addr, const void *buf, size_t size, lldb::SBError &error); 235 236 size_t 237 ReadCStringFromMemory (addr_t addr, void *buf, size_t size, lldb::SBError &error); 238 239 uint64_t 240 ReadUnsignedFromMemory (addr_t addr, uint32_t byte_size, lldb::SBError &error); 241 242 lldb::addr_t 243 ReadPointerFromMemory (addr_t addr, lldb::SBError &error); 244 245 // Events 246 static lldb::StateType 247 GetStateFromEvent (const lldb::SBEvent &event); 248 249 static bool 250 GetRestartedFromEvent (const lldb::SBEvent &event); 251 252 static size_t 253 GetNumRestartedReasonsFromEvent (const lldb::SBEvent &event); 254 255 static const char * 256 GetRestartedReasonAtIndexFromEvent (const lldb::SBEvent &event, size_t idx); 257 258 static lldb::SBProcess 259 GetProcessFromEvent (const lldb::SBEvent &event); 260 261 static bool 262 EventIsProcessEvent (const lldb::SBEvent &event); 263 264 lldb::SBBroadcaster 265 GetBroadcaster () const; 266 267 static const char * 268 GetBroadcasterClass (); 269 270 bool 271 GetDescription (lldb::SBStream &description); 272 273 uint32_t 274 GetNumSupportedHardwareWatchpoints (lldb::SBError &error) const; 275 276 uint32_t 277 LoadImage (lldb::SBFileSpec &image_spec, lldb::SBError &error); 278 279 lldb::SBError 280 UnloadImage (uint32_t image_token); 281 282 //------------------------------------------------------------------ 283 /// Return the number of different thread-origin extended backtraces 284 /// this process can support. 285 /// 286 /// When the process is stopped and you have an SBThread, lldb may be 287 /// able to show a backtrace of when that thread was originally created, 288 /// or the work item was enqueued to it (in the case of a libdispatch 289 /// queue). 290 /// 291 /// @return 292 /// The number of thread-origin extended backtrace types that may be 293 /// available. 294 //------------------------------------------------------------------ 295 uint32_t 296 GetNumExtendedBacktraceTypes (); 297 298 //------------------------------------------------------------------ 299 /// Return the name of one of the thread-origin extended backtrace 300 /// methods. 301 /// 302 /// @param [in] idx 303 /// The index of the name to return. They will be returned in 304 /// the order that the user will most likely want to see them. 305 /// e.g. if the type at index 0 is not available for a thread, 306 /// see if the type at index 1 provides an extended backtrace. 307 /// 308 /// @return 309 /// The name at that index. 310 //------------------------------------------------------------------ 311 const char * 312 GetExtendedBacktraceTypeAtIndex (uint32_t idx); 313 314protected: 315 friend class SBAddress; 316 friend class SBBreakpoint; 317 friend class SBBreakpointLocation; 318 friend class SBCommandInterpreter; 319 friend class SBDebugger; 320 friend class SBFunction; 321 friend class SBModule; 322 friend class SBTarget; 323 friend class SBThread; 324 friend class SBValue; 325 friend class lldb_private::QueueImpl; 326 327 lldb::ProcessSP 328 GetSP() const; 329 330 void 331 SetSP (const lldb::ProcessSP &process_sp); 332 333 lldb::ProcessWP m_opaque_wp; 334}; 335 336} // namespace lldb 337 338#endif // LLDB_SBProcess_h_ 339