blob: 9b211d0f74bd7fceef79ab9a73d44ba2a75573bf [file] [log] [blame]
//===-- SBAttachInfo.h ------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_API_SBATTACHINFO_H
#define LLDB_API_SBATTACHINFO_H
#include "lldb/API/SBDefines.h"
namespace lldb {
class SBTarget;
class LLDB_API SBAttachInfo {
public:
SBAttachInfo();
SBAttachInfo(lldb::pid_t pid);
/// Attach to a process by name.
///
/// This function implies that a future call to SBTarget::Attach(...)
/// will be synchronous.
///
/// \param[in] path
/// A full or partial name for the process to attach to.
///
/// \param[in] wait_for
/// If \b false, attach to an existing process whose name matches.
/// If \b true, then wait for the next process whose name matches.
SBAttachInfo(const char *path, bool wait_for);
/// Attach to a process by name.
///
/// Future calls to SBTarget::Attach(...) will be synchronous or
/// asynchronous depending on the \a async argument.
///
/// \param[in] path
/// A full or partial name for the process to attach to.
///
/// \param[in] wait_for
/// If \b false, attach to an existing process whose name matches.
/// If \b true, then wait for the next process whose name matches.
///
/// \param[in] async
/// If \b false, then the SBTarget::Attach(...) call will be a
/// synchronous call with no way to cancel the attach in
/// progress.
/// If \b true, then the SBTarget::Attach(...) function will
/// return immediately and clients are expected to wait for a
/// process eStateStopped event if a suitable process is
/// eventually found. If the client wants to cancel the event,
/// SBProcess::Stop() can be called and an eStateExited process
/// event will be delivered.
SBAttachInfo(const char *path, bool wait_for, bool async);
SBAttachInfo(const SBAttachInfo &rhs);
~SBAttachInfo();
SBAttachInfo &operator=(const SBAttachInfo &rhs);
lldb::pid_t GetProcessID();
void SetProcessID(lldb::pid_t pid);
void SetExecutable(const char *path);
void SetExecutable(lldb::SBFileSpec exe_file);
bool GetWaitForLaunch();
/// Set attach by process name settings.
///
/// Designed to be used after a call to SBAttachInfo::SetExecutable().
/// This function implies that a call to SBTarget::Attach(...) will
/// be synchronous.
///
/// \param[in] b
/// If \b false, attach to an existing process whose name matches.
/// If \b true, then wait for the next process whose name matches.
void SetWaitForLaunch(bool b);
/// Set attach by process name settings.
///
/// Designed to be used after a call to SBAttachInfo::SetExecutable().
/// Future calls to SBTarget::Attach(...) will be synchronous or
/// asynchronous depending on the \a async argument.
///
/// \param[in] b
/// If \b false, attach to an existing process whose name matches.
/// If \b true, then wait for the next process whose name matches.
///
/// \param[in] async
/// If \b false, then the SBTarget::Attach(...) call will be a
/// synchronous call with no way to cancel the attach in
/// progress.
/// If \b true, then the SBTarget::Attach(...) function will
/// return immediately and clients are expected to wait for a
/// process eStateStopped event if a suitable process is
/// eventually found. If the client wants to cancel the event,
/// SBProcess::Stop() can be called and an eStateExited process
/// event will be delivered.
void SetWaitForLaunch(bool b, bool async);
bool GetIgnoreExisting();
void SetIgnoreExisting(bool b);
uint32_t GetResumeCount();
void SetResumeCount(uint32_t c);
const char *GetProcessPluginName();
void SetProcessPluginName(const char *plugin_name);
uint32_t GetUserID();
uint32_t GetGroupID();
bool UserIDIsValid();
bool GroupIDIsValid();
void SetUserID(uint32_t uid);
void SetGroupID(uint32_t gid);
uint32_t GetEffectiveUserID();
uint32_t GetEffectiveGroupID();
bool EffectiveUserIDIsValid();
bool EffectiveGroupIDIsValid();
void SetEffectiveUserID(uint32_t uid);
void SetEffectiveGroupID(uint32_t gid);
lldb::pid_t GetParentProcessID();
void SetParentProcessID(lldb::pid_t pid);
bool ParentProcessIDIsValid();
/// Get the listener that will be used to receive process events.
///
/// If no listener has been set via a call to
/// SBAttachInfo::SetListener(), then an invalid SBListener will be
/// returned (SBListener::IsValid() will return false). If a listener
/// has been set, then the valid listener object will be returned.
SBListener GetListener();
/// Set the listener that will be used to receive process events.
///
/// By default the SBDebugger, which has a listener, that the SBTarget
/// belongs to will listen for the process events. Calling this function
/// allows a different listener to be used to listen for process events.
void SetListener(SBListener &listener);
protected:
friend class SBTarget;
lldb_private::ProcessAttachInfo &ref();
ProcessAttachInfoSP m_opaque_sp;
};
} // namespace lldb
#endif // LLDB_API_SBATTACHINFO_H