aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/API/SBAttachInfo.h
blob: a246d9919cfa0d59a4fb8825236691d676b5d09c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
//===-- SBAttachInfo.h ------------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef LLDB_SBAttachInfo_h_
#define LLDB_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] 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.
    //------------------------------------------------------------------
    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] 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.
    //------------------------------------------------------------------
    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
    /// SBLaunchInfo::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_SBAttachInfo_h_