bool SBProcess::RemoteAttachToProcessWithID (lldb::pid_t pid, lldb::SBError& error) { ProcessSP process_sp(GetSP()); if (process_sp) { Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); if (process_sp->GetState() == eStateConnected) { ProcessAttachInfo attach_info; attach_info.SetProcessID (pid); error.SetError (process_sp->Attach (attach_info)); } else { error.SetErrorString ("must be in eStateConnected to call RemoteAttachToProcessWithID"); } } else { error.SetErrorString ("unable to attach pid"); } Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { SBStream sstr; error.GetDescription (sstr); log->Printf ("SBProcess(%p)::RemoteAttachToProcessWithID (%" PRIu64 ") => SBError (%p): %s", static_cast<void*>(process_sp.get()), pid, static_cast<void*>(error.get()), sstr.GetData()); } return error.Success(); }
bool SBProcess::RemoteAttachToProcessWithID (lldb::pid_t pid, lldb::SBError& error) { if (m_opaque_sp) { Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); if (m_opaque_sp->GetState() == eStateConnected) { error.SetError (m_opaque_sp->Attach (pid)); } else { error.SetErrorString ("must be in eStateConnected to call RemoteAttachToProcessWithID"); } } else { error.SetErrorString ("unable to attach pid"); } LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { SBStream sstr; error.GetDescription (sstr); log->Printf ("SBProcess(%p)::RemoteAttachToProcessWithID (%d) => SBError (%p): %s", error.get(), sstr.GetData()); } return error.Success(); }
//++ // Details: Short cut function to check MI command's execute status and // set an error in case of failure. // Type: Method. // Args: error - (R) Error description object. // successHandler - (R) function describing actions to execute // in case of success state of passed SBError object. // errorHandler - (R) function describing actions to execute // in case of fail status of passed SBError object. // Return: bool. // Throws: None. //-- bool CMICmdBase::HandleSBError(const lldb::SBError &error, const std::function<bool()> &successHandler, const std::function<void()> &errorHandler) { if (error.Success()) return successHandler(); SetError(error.GetCString()); errorHandler(); return MIstatus::failure; }
bool SBProcess::RemoteLaunch (char const **argv, char const **envp, const char *stdin_path, const char *stdout_path, const char *stderr_path, const char *working_directory, uint32_t launch_flags, bool stop_at_entry, lldb::SBError& error) { LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { log->Printf ("SBProcess(%p)::RemoteLaunch (argv=%p, envp=%p, stdin=%s, stdout=%s, stderr=%s, working-dir=%s, launch_flags=0x%x, stop_at_entry=%i, &error (%p))...", m_opaque_sp.get(), argv, envp, stdin_path ? stdin_path : "NULL", stdout_path ? stdout_path : "NULL", stderr_path ? stderr_path : "NULL", working_directory ? working_directory : "NULL", launch_flags, stop_at_entry, error.get()); } if (m_opaque_sp) { Mutex::Locker api_locker (m_opaque_sp->GetTarget().GetAPIMutex()); if (m_opaque_sp->GetState() == eStateConnected) { error.SetError (m_opaque_sp->Launch (argv, envp, launch_flags, stdin_path, stdout_path, stderr_path, working_directory)); } else { error.SetErrorString ("must be in eStateConnected to call RemoteLaunch"); } } else { error.SetErrorString ("unable to attach pid"); } if (log) { SBStream sstr; error.GetDescription (sstr); log->Printf ("SBProcess(%p)::RemoteLaunch (...) => SBError (%p): %s", error.get(), sstr.GetData()); } return error.Success(); }
lldb::SBTarget SBDebugger::CreateTarget (const char *filename, const char *target_triple, const char *platform_name, bool add_dependent_modules, lldb::SBError& sb_error) { SBTarget sb_target; TargetSP target_sp; if (m_opaque_sp) { sb_error.Clear(); FileSpec filename_spec (filename, true); OptionGroupPlatform platform_options (false); platform_options.SetPlatformName (platform_name); sb_error.ref() = m_opaque_sp->GetTargetList().CreateTarget (*m_opaque_sp, filename_spec, target_triple, add_dependent_modules, &platform_options, target_sp); if (sb_error.Success()) sb_target.SetSP (target_sp); } else { sb_error.SetErrorString("invalid target"); } LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) { log->Printf ("SBDebugger(%p)::CreateTarget (filename=\"%s\", triple=%s, platform_name=%s, add_dependent_modules=%u, error=%s) => SBTarget(%p)", m_opaque_sp.get(), filename, target_triple, platform_name, add_dependent_modules, sb_error.GetCString(), target_sp.get()); } return sb_target; }
bool SBProcess::RemoteLaunch (char const **argv, char const **envp, const char *stdin_path, const char *stdout_path, const char *stderr_path, const char *working_directory, uint32_t launch_flags, bool stop_at_entry, lldb::SBError& error) { Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (log) log->Printf ("SBProcess(%p)::RemoteLaunch (argv=%p, envp=%p, stdin=%s, stdout=%s, stderr=%s, working-dir=%s, launch_flags=0x%x, stop_at_entry=%i, &error (%p))...", static_cast<void*>(m_opaque_wp.lock().get()), static_cast<void*>(argv), static_cast<void*>(envp), stdin_path ? stdin_path : "NULL", stdout_path ? stdout_path : "NULL", stderr_path ? stderr_path : "NULL", working_directory ? working_directory : "NULL", launch_flags, stop_at_entry, static_cast<void*>(error.get())); ProcessSP process_sp(GetSP()); if (process_sp) { Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex()); if (process_sp->GetState() == eStateConnected) { if (stop_at_entry) launch_flags |= eLaunchFlagStopAtEntry; ProcessLaunchInfo launch_info(FileSpec{stdin_path, false}, FileSpec{stdout_path, false}, FileSpec{stderr_path, false}, FileSpec{working_directory, false}, launch_flags); Module *exe_module = process_sp->GetTarget().GetExecutableModulePointer(); if (exe_module) launch_info.SetExecutableFile(exe_module->GetPlatformFileSpec(), true); if (argv) launch_info.GetArguments().AppendArguments (argv); if (envp) launch_info.GetEnvironmentEntries ().SetArguments (envp); error.SetError (process_sp->Launch (launch_info)); } else { error.SetErrorString ("must be in eStateConnected to call RemoteLaunch"); } } else { error.SetErrorString ("unable to attach pid"); } if (log) { SBStream sstr; error.GetDescription (sstr); log->Printf ("SBProcess(%p)::RemoteLaunch (...) => SBError (%p): %s", static_cast<void*>(process_sp.get()), static_cast<void*>(error.get()), sstr.GetData()); } return error.Success(); }