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