LLDB mainline
SBCommandInterpreter.h
Go to the documentation of this file.
1//===-- SBCommandInterpreter.h ----------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_API_SBCOMMANDINTERPRETER_H
10#define LLDB_API_SBCOMMANDINTERPRETER_H
11
12#include <memory>
13
14#include "lldb/API/SBDebugger.h"
15#include "lldb/API/SBDefines.h"
16
17namespace lldb_private {
18class CommandPluginInterfaceImplementation;
19}
20
21namespace lldb {
22
24public:
25 enum {
28 eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit
31 };
32
35
37
40
41 static const char *
43
44 static const char *
46
47 static bool EventIsCommandInterpreterEvent(const lldb::SBEvent &event);
48
49 explicit operator bool() const;
50
51 bool IsValid() const;
52
53 /// Return whether a built-in command with the passed in
54 /// name or command path exists.
55 ///
56 /// \param[in] cmd
57 /// The command or command path to search for.
58 ///
59 /// \return
60 /// \b true if the command exists, \b false otherwise.
61 bool CommandExists(const char *cmd);
62
63 /// Return whether a user defined command with the passed in
64 /// name or command path exists.
65 ///
66 /// \param[in] cmd
67 /// The command or command path to search for.
68 ///
69 /// \return
70 /// \b true if the command exists, \b false otherwise.
71 bool UserCommandExists(const char *cmd);
72
73 /// Return whether the passed in name or command path
74 /// exists and is an alias to some other command.
75 ///
76 /// \param[in] cmd
77 /// The command or command path to search for.
78 ///
79 /// \return
80 /// \b true if the command exists, \b false otherwise.
81 bool AliasExists(const char *cmd);
82
84
85 static const char *GetBroadcasterClass();
86
87 bool HasCommands();
88
89 bool HasAliases();
90
91 bool HasAliasOptions();
92
93 bool IsInteractive();
94
96
98
99#ifndef SWIG
100 lldb::SBCommand AddMultiwordCommand(const char *name, const char *help);
101
102 /// Add a new command to the lldb::CommandInterpreter.
103 ///
104 /// The new command won't support autorepeat. If you need this functionality,
105 /// use the override of this function that accepts the \a auto_repeat_command
106 /// parameter.
107 ///
108 /// \param[in] name
109 /// The name of the command.
110 ///
111 /// \param[in] impl
112 /// The handler of this command.
113 ///
114 /// \param[in] help
115 /// The general description to show as part of the help message of this
116 /// command.
117 ///
118 /// \return
119 /// A lldb::SBCommand representing the newly created command.
120 lldb::SBCommand AddCommand(const char *name,
122 const char *help);
123
124 /// Add a new command to the lldb::CommandInterpreter.
125 ///
126 /// The new command won't support autorepeat. If you need this functionality,
127 /// use the override of this function that accepts the \a auto_repeat_command
128 /// parameter.
129 ///
130 /// \param[in] name
131 /// The name of the command.
132 ///
133 /// \param[in] impl
134 /// The handler of this command.
135 ///
136 /// \param[in] help
137 /// The general description to show as part of the help message of this
138 /// command.
139 ///
140 /// \param[in] syntax
141 /// The syntax to show as part of the help message of this command. This
142 /// could include a description of the different arguments and flags this
143 /// command accepts.
144 ///
145 /// \return
146 /// A lldb::SBCommand representing the newly created command.
147 lldb::SBCommand AddCommand(const char *name,
149 const char *help, const char *syntax);
150
151 /// Add a new command to the lldb::CommandInterpreter.
152 ///
153 /// \param[in] name
154 /// The name of the command.
155 ///
156 /// \param[in] impl
157 /// The handler of this command.
158 ///
159 /// \param[in] help
160 /// The general description to show as part of the help message of this
161 /// command.
162 ///
163 /// \param[in] syntax
164 /// The syntax to show as part of the help message of this command. This
165 /// could include a description of the different arguments and flags this
166 /// command accepts.
167 ///
168 /// \param[in] auto_repeat_command
169 /// Autorepeating is triggered when the user presses Enter successively
170 /// after executing a command. If \b nullptr is provided, the previous
171 /// exact command will be repeated. If \b "" is provided, autorepeating
172 /// is disabled. Otherwise, the provided string is used as a repeat
173 /// command.
174 ///
175 /// \return
176 /// A lldb::SBCommand representing the newly created command.
177 lldb::SBCommand AddCommand(const char *name,
179 const char *help, const char *syntax,
180 const char *auto_repeat_command);
182#endif
183
184
187 bool is_repl);
188
189 void
191
192 lldb::ReturnStatus HandleCommand(const char *command_line,
194 bool add_to_history = false);
195
196 lldb::ReturnStatus HandleCommand(const char *command_line,
197 SBExecutionContext &exe_ctx,
198 SBCommandReturnObject &result,
199 bool add_to_history = false);
200
202 lldb::SBExecutionContext &override_context,
205
206 // The pointer based interface is not useful in SWIG, since the cursor &
207 // last_char arguments are string pointers INTO current_line and you can't do
208 // that in a scripting language interface in general...
209
210 // In either case, the way this works is that the you give it a line and
211 // cursor position in the line. The function will return the number of
212 // completions. The matches list will contain number_of_completions + 1
213 // elements. The first element is the common substring after the cursor
214 // position for all the matches. The rest of the elements are the matches.
215 // The first element is useful if you are emulating the common shell behavior
216 // where the tab completes to the string that is common among all the
217 // matches, then you should first check if the first element is non-empty,
218 // and if so just insert it and move the cursor to the end of the insertion.
219 // The next tab will return an empty common substring, and a list of choices
220 // (if any), at which point you should display the choices and let the user
221 // type further to disambiguate.
222
223#ifndef SWIG
224 int HandleCompletion(const char *current_line, const char *cursor,
225 const char *last_char, int match_start_point,
226 int max_return_elements, lldb::SBStringList &matches);
227#endif
228
229 int HandleCompletion(const char *current_line, uint32_t cursor_pos,
230 int match_start_point, int max_return_elements,
231 lldb::SBStringList &matches);
232
233 // Same as HandleCompletion, but also fills out `descriptions` with
234 // descriptions for each match.
235#ifndef SWIG
237 const char *current_line, const char *cursor, const char *last_char,
238 int match_start_point, int max_return_elements,
239 lldb::SBStringList &matches, lldb::SBStringList &descriptions);
240#endif
241
242 int HandleCompletionWithDescriptions(const char *current_line,
243 uint32_t cursor_pos,
244 int match_start_point,
245 int max_return_elements,
246 lldb::SBStringList &matches,
247 lldb::SBStringList &descriptions);
248
249 /// Returns whether an interrupt flag was raised either by the SBDebugger -
250 /// when the function is not running on the RunCommandInterpreter thread, or
251 /// by SBCommandInterpreter::InterruptCommand if it is. If your code is doing
252 /// interruptible work, check this API periodically, and interrupt if it
253 /// returns true.
254 bool WasInterrupted() const;
255
256 /// Interrupts the command currently executing in the RunCommandInterpreter
257 /// thread.
258 ///
259 /// \return
260 /// \b true if there was a command in progress to recieve the interrupt.
261 /// \b false if there's no command currently in flight.
262 bool InterruptCommand();
263
264 // Catch commands before they execute by registering a callback that will get
265 // called when the command gets executed. This allows GUI or command line
266 // interfaces to intercept a command and stop it from happening
267#ifndef SWIG
268 bool SetCommandOverrideCallback(const char *command_name,
270 void *baton);
271#endif
272
273 /// Return true if the command interpreter is the active IO handler.
274 ///
275 /// This indicates that any input coming into the debugger handles will
276 /// go to the command interpreter and will result in LLDB command line
277 /// commands being executed.
278 bool IsActive();
279
280 /// Get the string that needs to be written to the debugger stdin file
281 /// handle when a control character is typed.
282 ///
283 /// Some GUI programs will intercept "control + char" sequences and want
284 /// to have them do what normally would happen when using a real
285 /// terminal, so this function allows GUI programs to emulate this
286 /// functionality.
287 ///
288 /// \param[in] ch
289 /// The character that was typed along with the control key
290 ///
291 /// \return
292 /// The string that should be written into the file handle that is
293 /// feeding the input stream for the debugger, or nullptr if there is
294 /// no string for this control key.
295 const char *GetIOHandlerControlSequence(char ch);
296
297 bool GetPromptOnQuit();
298
299 void SetPromptOnQuit(bool b);
300
301 /// Sets whether the command interpreter should allow custom exit codes
302 /// for the 'quit' command.
303 void AllowExitCodeOnQuit(bool allow);
304
305 /// Returns true if the user has called the 'quit' command with a custom exit
306 /// code.
308
309 /// Returns the exit code that the user has specified when running the
310 /// 'quit' command. Returns 0 if the user hasn't called 'quit' at all or
311 /// without a custom exit code.
312 int GetQuitStatus();
313
314 /// Resolve the command just as HandleCommand would, expanding abbreviations
315 /// and aliases. If successful, result->GetOutput has the full expansion.
316 void ResolveCommand(const char *command_line, SBCommandReturnObject &result);
317
318protected:
320
321 /// Access using SBDebugger::GetCommandInterpreter();
324
326
328
329private:
330 friend class SBDebugger;
331
333};
334
335#ifndef SWIG
337public:
338 virtual ~SBCommandPluginInterface() = default;
339
340 virtual bool DoExecute(lldb::SBDebugger /*debugger*/, char ** /*command*/,
341 lldb::SBCommandReturnObject & /*result*/) {
342 return false;
343 }
344};
345
347public:
348 SBCommand();
349
350 explicit operator bool() const;
351
352 bool IsValid();
353
354 const char *GetName();
355
356 const char *GetHelp();
357
358 const char *GetHelpLong();
359
360 void SetHelp(const char *);
361
362 void SetHelpLong(const char *);
363
364 uint32_t GetFlags();
365
366 void SetFlags(uint32_t flags);
367
368 lldb::SBCommand AddMultiwordCommand(const char *name,
369 const char *help = nullptr);
370
371 /// Add a new subcommand to the lldb::SBCommand.
372 ///
373 /// The new command won't support autorepeat. If you need this functionality,
374 /// use the override of this function that accepts the \a auto_repeat
375 /// parameter.
376 ///
377 /// \param[in] name
378 /// The name of the command.
379 ///
380 /// \param[in] impl
381 /// The handler of this command.
382 ///
383 /// \param[in] help
384 /// The general description to show as part of the help message of this
385 /// command.
386 ///
387 /// \return
388 /// A lldb::SBCommand representing the newly created command.
389 lldb::SBCommand AddCommand(const char *name,
391 const char *help = nullptr);
392
393 /// Add a new subcommand to the lldb::SBCommand.
394 ///
395 /// The new command won't support autorepeat. If you need this functionality,
396 /// use the override of this function that accepts the \a auto_repeat_command
397 /// parameter.
398 ///
399 /// \param[in] name
400 /// The name of the command.
401 ///
402 /// \param[in] impl
403 /// The handler of this command.
404 ///
405 /// \param[in] help
406 /// The general description to show as part of the help message of this
407 /// command.
408 ///
409 /// \param[in] syntax
410 /// The syntax to show as part of the help message of this command. This
411 /// could include a description of the different arguments and flags this
412 /// command accepts.
413 ///
414 /// \return
415 /// A lldb::SBCommand representing the newly created command.
416 lldb::SBCommand AddCommand(const char *name,
418 const char *help, const char *syntax);
419
420 /// Add a new subcommand to the lldb::SBCommand.
421 ///
422 /// The new command won't support autorepeat. If you need this functionality,
423 /// use the override of this function that accepts the \a auto_repeat_command
424 /// parameter.
425 ///
426 /// \param[in] name
427 /// The name of the command.
428 ///
429 /// \param[in] impl
430 /// The handler of this command.
431 ///
432 /// \param[in] help
433 /// The general description to show as part of the help message of this
434 /// command.
435 ///
436 /// \param[in] syntax
437 /// The syntax to show as part of the help message of this command. This
438 /// could include a description of the different arguments and flags this
439 /// command accepts.
440 ///
441 /// \param[in] auto_repeat_command
442 /// Autorepeating is triggered when the user presses Enter successively
443 /// after executing a command. If \b nullptr is provided, the previous
444 /// exact command will be repeated. If \b "" is provided, autorepeating
445 /// is disabled. Otherwise, the provided string is used as a repeat
446 /// command.
447 ///
448 /// \return
449 /// A lldb::SBCommand representing the newly created command.
450 lldb::SBCommand AddCommand(const char *name,
452 const char *help, const char *syntax,
453 const char *auto_repeat_command);
454
455private:
456 friend class SBDebugger;
458
460
462};
463#endif
464
465} // namespace lldb
466
467#endif // LLDB_API_SBCOMMANDINTERPRETER_H
lldb::SBCommand AddMultiwordCommand(const char *name, const char *help)
const lldb::SBCommandInterpreter & operator=(const lldb::SBCommandInterpreter &rhs)
lldb_private::CommandInterpreter & ref()
void ResolveCommand(const char *command_line, SBCommandReturnObject &result)
Resolve the command just as HandleCommand would, expanding abbreviations and aliases.
static const char * GetBroadcasterClass()
const char * GetIOHandlerControlSequence(char ch)
Get the string that needs to be written to the debugger stdin file handle when a control character is...
lldb::SBCommand AddCommand(const char *name, lldb::SBCommandPluginInterface *impl, const char *help)
Add a new command to the lldb::CommandInterpreter.
void AllowExitCodeOnQuit(bool allow)
Sets whether the command interpreter should allow custom exit codes for the 'quit' command.
bool AliasExists(const char *cmd)
Return whether the passed in name or command path exists and is an alias to some other command.
bool IsActive()
Return true if the command interpreter is the active IO handler.
static const char * GetArgumentDescriptionAsCString(const lldb::CommandArgumentType arg_type)
int HandleCompletion(const char *current_line, const char *cursor, const char *last_char, int match_start_point, int max_return_elements, lldb::SBStringList &matches)
void reset(lldb_private::CommandInterpreter *)
static const char * GetArgumentTypeAsCString(const lldb::CommandArgumentType arg_type)
bool SetCommandOverrideCallback(const char *command_name, lldb::CommandOverrideCallback callback, void *baton)
bool WasInterrupted() const
Returns whether an interrupt flag was raised either by the SBDebugger - when the function is not runn...
void SourceInitFileInCurrentWorkingDirectory(lldb::SBCommandReturnObject &result)
bool UserCommandExists(const char *cmd)
Return whether a user defined command with the passed in name or command path exists.
bool InterruptCommand()
Interrupts the command currently executing in the RunCommandInterpreter thread.
void SourceInitFileInHomeDirectory(lldb::SBCommandReturnObject &result)
lldb_private::CommandInterpreter * m_opaque_ptr
void HandleCommandsFromFile(lldb::SBFileSpec &file, lldb::SBExecutionContext &override_context, lldb::SBCommandInterpreterRunOptions &options, lldb::SBCommandReturnObject result)
lldb_private::CommandInterpreter * get()
bool HasCustomQuitExitCode()
Returns true if the user has called the 'quit' command with a custom exit code.
int HandleCompletionWithDescriptions(const char *current_line, const char *cursor, const char *last_char, int match_start_point, int max_return_elements, lldb::SBStringList &matches, lldb::SBStringList &descriptions)
void SourceInitFileInGlobalDirectory(lldb::SBCommandReturnObject &result)
bool CommandExists(const char *cmd)
Return whether a built-in command with the passed in name or command path exists.
lldb::ReturnStatus HandleCommand(const char *command_line, lldb::SBCommandReturnObject &result, bool add_to_history=false)
lldb::SBBroadcaster GetBroadcaster()
int GetQuitStatus()
Returns the exit code that the user has specified when running the 'quit' command.
static bool EventIsCommandInterpreterEvent(const lldb::SBEvent &event)
virtual ~SBCommandPluginInterface()=default
virtual bool DoExecute(lldb::SBDebugger, char **, lldb::SBCommandReturnObject &)
const char * GetHelpLong()
lldb::CommandObjectSP m_opaque_sp
lldb::SBCommand AddMultiwordCommand(const char *name, const char *help=nullptr)
void SetHelpLong(const char *)
void SetFlags(uint32_t flags)
lldb::SBCommand AddCommand(const char *name, lldb::SBCommandPluginInterface *impl, const char *help=nullptr)
Add a new subcommand to the lldb::SBCommand.
void SetHelp(const char *)
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
Definition: SBAddress.h:15
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
Definition: lldb-forward.h:315
ReturnStatus
Command Return Status Types.
bool(* CommandOverrideCallback)(void *baton, const char **argv)
Definition: lldb-types.h:73