aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Interpreter/CommandInterpreter.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Interpreter/CommandInterpreter.h')
-rw-r--r--include/lldb/Interpreter/CommandInterpreter.h1130
1 files changed, 488 insertions, 642 deletions
diff --git a/include/lldb/Interpreter/CommandInterpreter.h b/include/lldb/Interpreter/CommandInterpreter.h
index 4dc2c5859f45..00dec5134c8f 100644
--- a/include/lldb/Interpreter/CommandInterpreter.h
+++ b/include/lldb/Interpreter/CommandInterpreter.h
@@ -12,699 +12,545 @@
// C Includes
// C++ Includes
+#include <mutex>
// Other libraries and framework includes
// Project includes
-#include "lldb/lldb-forward.h"
-#include "lldb/lldb-private.h"
#include "lldb/Core/Broadcaster.h"
#include "lldb/Core/Debugger.h"
+#include "lldb/Core/Event.h"
#include "lldb/Core/IOHandler.h"
#include "lldb/Core/Log.h"
+#include "lldb/Core/StringList.h"
+#include "lldb/Interpreter/Args.h"
#include "lldb/Interpreter/CommandAlias.h"
#include "lldb/Interpreter/CommandHistory.h"
#include "lldb/Interpreter/CommandObject.h"
#include "lldb/Interpreter/ScriptInterpreter.h"
-#include "lldb/Core/Event.h"
-#include "lldb/Interpreter/Args.h"
-#include "lldb/Core/StringList.h"
+#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
namespace lldb_private {
-class CommandInterpreterRunOptions
-{
+class CommandInterpreterRunOptions {
public:
- //------------------------------------------------------------------
- /// Construct a CommandInterpreterRunOptions object.
- /// This class is used to control all the instances where we run multiple commands, e.g.
- /// HandleCommands, HandleCommandsFromFile, RunCommandInterpreter.
- /// The meanings of the options in this object are:
- ///
- /// @param[in] stop_on_continue
- /// If \b true execution will end on the first command that causes the process in the
- /// execution context to continue. If \false, we won't check the execution status.
- /// @param[in] stop_on_error
- /// If \b true execution will end on the first command that causes an error.
- /// @param[in] stop_on_crash
- /// If \b true when a command causes the target to run, and the end of the run is a
- /// signal or exception, stop executing the commands.
- /// @param[in] echo_commands
- /// If \b true echo the command before executing it. If \false, execute silently.
- /// @param[in] print_results
- /// If \b true print the results of the command after executing it. If \false, execute silently.
- /// @param[in] add_to_history
- /// If \b true add the commands to the command history. If \false, don't add them.
- //------------------------------------------------------------------
- CommandInterpreterRunOptions (LazyBool stop_on_continue,
- LazyBool stop_on_error,
- LazyBool stop_on_crash,
- LazyBool echo_commands,
- LazyBool print_results,
- LazyBool add_to_history) :
- m_stop_on_continue(stop_on_continue),
- m_stop_on_error(stop_on_error),
- m_stop_on_crash(stop_on_crash),
- m_echo_commands(echo_commands),
- m_print_results(print_results),
- m_add_to_history(add_to_history)
- {}
-
- CommandInterpreterRunOptions () :
- m_stop_on_continue(eLazyBoolCalculate),
+ //------------------------------------------------------------------
+ /// Construct a CommandInterpreterRunOptions object.
+ /// This class is used to control all the instances where we run multiple
+ /// commands, e.g.
+ /// HandleCommands, HandleCommandsFromFile, RunCommandInterpreter.
+ /// The meanings of the options in this object are:
+ ///
+ /// @param[in] stop_on_continue
+ /// If \b true execution will end on the first command that causes the
+ /// process in the
+ /// execution context to continue. If \false, we won't check the execution
+ /// status.
+ /// @param[in] stop_on_error
+ /// If \b true execution will end on the first command that causes an
+ /// error.
+ /// @param[in] stop_on_crash
+ /// If \b true when a command causes the target to run, and the end of the
+ /// run is a
+ /// signal or exception, stop executing the commands.
+ /// @param[in] echo_commands
+ /// If \b true echo the command before executing it. If \false, execute
+ /// silently.
+ /// @param[in] print_results
+ /// If \b true print the results of the command after executing it. If
+ /// \false, execute silently.
+ /// @param[in] add_to_history
+ /// If \b true add the commands to the command history. If \false, don't
+ /// add them.
+ //------------------------------------------------------------------
+ CommandInterpreterRunOptions(LazyBool stop_on_continue,
+ LazyBool stop_on_error, LazyBool stop_on_crash,
+ LazyBool echo_commands, LazyBool print_results,
+ LazyBool add_to_history)
+ : m_stop_on_continue(stop_on_continue), m_stop_on_error(stop_on_error),
+ m_stop_on_crash(stop_on_crash), m_echo_commands(echo_commands),
+ m_print_results(print_results), m_add_to_history(add_to_history) {}
+
+ CommandInterpreterRunOptions()
+ : m_stop_on_continue(eLazyBoolCalculate),
m_stop_on_error(eLazyBoolCalculate),
m_stop_on_crash(eLazyBoolCalculate),
m_echo_commands(eLazyBoolCalculate),
m_print_results(eLazyBoolCalculate),
- m_add_to_history(eLazyBoolCalculate)
- {}
+ m_add_to_history(eLazyBoolCalculate) {}
- void
- SetSilent (bool silent)
- {
- LazyBool value = silent ? eLazyBoolNo : eLazyBoolYes;
+ void SetSilent(bool silent) {
+ LazyBool value = silent ? eLazyBoolNo : eLazyBoolYes;
- m_echo_commands = value;
- m_print_results = value;
- m_add_to_history = value;
- }
- // These return the default behaviors if the behavior is not eLazyBoolCalculate.
- // But I've also left the ivars public since for different ways of running the
- // interpreter you might want to force different defaults... In that case, just grab
- // the LazyBool ivars directly and do what you want with eLazyBoolCalculate.
- bool
- GetStopOnContinue () const
- {
- return DefaultToNo (m_stop_on_continue);
- }
+ m_echo_commands = value;
+ m_print_results = value;
+ m_add_to_history = value;
+ }
+ // These return the default behaviors if the behavior is not
+ // eLazyBoolCalculate.
+ // But I've also left the ivars public since for different ways of running the
+ // interpreter you might want to force different defaults... In that case,
+ // just grab
+ // the LazyBool ivars directly and do what you want with eLazyBoolCalculate.
+ bool GetStopOnContinue() const { return DefaultToNo(m_stop_on_continue); }
- void
- SetStopOnContinue (bool stop_on_continue)
- {
- m_stop_on_continue = stop_on_continue ? eLazyBoolYes : eLazyBoolNo;
- }
+ void SetStopOnContinue(bool stop_on_continue) {
+ m_stop_on_continue = stop_on_continue ? eLazyBoolYes : eLazyBoolNo;
+ }
- bool
- GetStopOnError () const
- {
- return DefaultToNo (m_stop_on_continue);
- }
+ bool GetStopOnError() const { return DefaultToNo(m_stop_on_continue); }
- void
- SetStopOnError (bool stop_on_error)
- {
- m_stop_on_error = stop_on_error ? eLazyBoolYes : eLazyBoolNo;
- }
+ void SetStopOnError(bool stop_on_error) {
+ m_stop_on_error = stop_on_error ? eLazyBoolYes : eLazyBoolNo;
+ }
- bool
- GetStopOnCrash () const
- {
- return DefaultToNo (m_stop_on_crash);
- }
+ bool GetStopOnCrash() const { return DefaultToNo(m_stop_on_crash); }
- void
- SetStopOnCrash (bool stop_on_crash)
- {
- m_stop_on_crash = stop_on_crash ? eLazyBoolYes : eLazyBoolNo;
- }
+ void SetStopOnCrash(bool stop_on_crash) {
+ m_stop_on_crash = stop_on_crash ? eLazyBoolYes : eLazyBoolNo;
+ }
- bool
- GetEchoCommands () const
- {
- return DefaultToYes (m_echo_commands);
- }
+ bool GetEchoCommands() const { return DefaultToYes(m_echo_commands); }
- void
- SetEchoCommands (bool echo_commands)
- {
- m_echo_commands = echo_commands ? eLazyBoolYes : eLazyBoolNo;
- }
+ void SetEchoCommands(bool echo_commands) {
+ m_echo_commands = echo_commands ? eLazyBoolYes : eLazyBoolNo;
+ }
- bool
- GetPrintResults () const
- {
- return DefaultToYes (m_print_results);
- }
+ bool GetPrintResults() const { return DefaultToYes(m_print_results); }
- void
- SetPrintResults (bool print_results)
- {
- m_print_results = print_results ? eLazyBoolYes : eLazyBoolNo;
- }
+ void SetPrintResults(bool print_results) {
+ m_print_results = print_results ? eLazyBoolYes : eLazyBoolNo;
+ }
- bool
- GetAddToHistory () const
- {
- return DefaultToYes (m_add_to_history);
- }
+ bool GetAddToHistory() const { return DefaultToYes(m_add_to_history); }
- void
- SetAddToHistory (bool add_to_history)
- {
- m_add_to_history = add_to_history ? eLazyBoolYes : eLazyBoolNo;
- }
+ void SetAddToHistory(bool add_to_history) {
+ m_add_to_history = add_to_history ? eLazyBoolYes : eLazyBoolNo;
+ }
- LazyBool m_stop_on_continue;
- LazyBool m_stop_on_error;
- LazyBool m_stop_on_crash;
- LazyBool m_echo_commands;
- LazyBool m_print_results;
- LazyBool m_add_to_history;
-
- private:
- static bool
- DefaultToYes (LazyBool flag)
- {
- switch (flag)
- {
- case eLazyBoolNo:
- return false;
- default:
- return true;
- }
- }
+ LazyBool m_stop_on_continue;
+ LazyBool m_stop_on_error;
+ LazyBool m_stop_on_crash;
+ LazyBool m_echo_commands;
+ LazyBool m_print_results;
+ LazyBool m_add_to_history;
- static bool
- DefaultToNo (LazyBool flag)
- {
- switch (flag)
- {
- case eLazyBoolYes:
- return true;
- default:
- return false;
- }
- }
+private:
+ static bool DefaultToYes(LazyBool flag) {
+ switch (flag) {
+ case eLazyBoolNo:
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ static bool DefaultToNo(LazyBool flag) {
+ switch (flag) {
+ case eLazyBoolYes:
+ return true;
+ default:
+ return false;
+ }
+ }
};
-class CommandInterpreter :
- public Broadcaster,
- public Properties,
- public IOHandlerDelegate
-{
+class CommandInterpreter : public Broadcaster,
+ public Properties,
+ public IOHandlerDelegate {
public:
- enum
- {
- eBroadcastBitThreadShouldExit = (1 << 0),
- eBroadcastBitResetPrompt = (1 << 1),
- eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit
- eBroadcastBitAsynchronousOutputData = (1 << 3),
- eBroadcastBitAsynchronousErrorData = (1 << 4)
- };
-
- enum ChildrenTruncatedWarningStatus // tristate boolean to manage children truncation warning
- {
- eNoTruncation = 0, // never truncated
- eUnwarnedTruncation = 1, // truncated but did not notify
- eWarnedTruncation = 2 // truncated and notified
- };
-
- enum CommandTypes
- {
- eCommandTypesBuiltin = 0x0001, // native commands such as "frame"
- eCommandTypesUserDef = 0x0002, // scripted commands
- eCommandTypesAliases = 0x0004, // aliases such as "po"
- eCommandTypesHidden = 0x0008, // commands prefixed with an underscore
- eCommandTypesAllThem = 0xFFFF // all commands
- };
-
- CommandInterpreter(Debugger &debugger,
- lldb::ScriptLanguage script_language,
- bool synchronous_execution);
-
- ~CommandInterpreter() override;
-
- // These two functions fill out the Broadcaster interface:
-
- static ConstString &GetStaticBroadcasterClass ();
-
- ConstString &GetBroadcasterClass() const override
- {
- return GetStaticBroadcasterClass();
- }
+ enum {
+ eBroadcastBitThreadShouldExit = (1 << 0),
+ eBroadcastBitResetPrompt = (1 << 1),
+ eBroadcastBitQuitCommandReceived = (1 << 2), // User entered quit
+ eBroadcastBitAsynchronousOutputData = (1 << 3),
+ eBroadcastBitAsynchronousErrorData = (1 << 4)
+ };
+
+ enum ChildrenTruncatedWarningStatus // tristate boolean to manage children
+ // truncation warning
+ { eNoTruncation = 0, // never truncated
+ eUnwarnedTruncation = 1, // truncated but did not notify
+ eWarnedTruncation = 2 // truncated and notified
+ };
+
+ enum CommandTypes {
+ eCommandTypesBuiltin = 0x0001, // native commands such as "frame"
+ eCommandTypesUserDef = 0x0002, // scripted commands
+ eCommandTypesAliases = 0x0004, // aliases such as "po"
+ eCommandTypesHidden = 0x0008, // commands prefixed with an underscore
+ eCommandTypesAllThem = 0xFFFF // all commands
+ };
+
+ CommandInterpreter(Debugger &debugger, lldb::ScriptLanguage script_language,
+ bool synchronous_execution);
+
+ ~CommandInterpreter() override;
+
+ // These two functions fill out the Broadcaster interface:
+
+ static ConstString &GetStaticBroadcasterClass();
+
+ ConstString &GetBroadcasterClass() const override {
+ return GetStaticBroadcasterClass();
+ }
+
+ void SourceInitFile(bool in_cwd, CommandReturnObject &result);
+
+ bool AddCommand(llvm::StringRef name, const lldb::CommandObjectSP &cmd_sp,
+ bool can_replace);
+
+ bool AddUserCommand(llvm::StringRef name, const lldb::CommandObjectSP &cmd_sp,
+ bool can_replace);
+
+ lldb::CommandObjectSP GetCommandSPExact(llvm::StringRef cmd,
+ bool include_aliases) const;
+
+ CommandObject *GetCommandObject(llvm::StringRef cmd,
+ StringList *matches = nullptr) const;
+
+ bool CommandExists(llvm::StringRef cmd) const;
+
+ bool AliasExists(llvm::StringRef cmd) const;
+
+ bool UserCommandExists(llvm::StringRef cmd) const;
+
+ CommandAlias *AddAlias(llvm::StringRef alias_name,
+ lldb::CommandObjectSP &command_obj_sp,
+ llvm::StringRef args_string = llvm::StringRef());
+
+ // Remove a command if it is removable (python or regex command)
+ bool RemoveCommand(llvm::StringRef cmd);
+
+ bool RemoveAlias(llvm::StringRef alias_name);
+
+ bool GetAliasFullName(llvm::StringRef cmd, std::string &full_name) const;
+
+ bool RemoveUser(llvm::StringRef alias_name);
+
+ void RemoveAllUser() { m_user_dict.clear(); }
+
+ const CommandAlias *GetAlias(llvm::StringRef alias_name) const;
+
+ CommandObject *BuildAliasResult(llvm::StringRef alias_name,
+ std::string &raw_input_string,
+ std::string &alias_result,
+ CommandReturnObject &result);
+
+ bool HandleCommand(const char *command_line, LazyBool add_to_history,
+ CommandReturnObject &result,
+ ExecutionContext *override_context = nullptr,
+ bool repeat_on_empty_command = true,
+ bool no_context_switching = false);
+
+ //------------------------------------------------------------------
+ /// Execute a list of commands in sequence.
+ ///
+ /// @param[in] commands
+ /// The list of commands to execute.
+ /// @param[in,out] context
+ /// The execution context in which to run the commands. Can be nullptr in
+ /// which case the default
+ /// context will be used.
+ /// @param[in] options
+ /// This object holds the options used to control when to stop, whether to
+ /// execute commands,
+ /// etc.
+ /// @param[out] result
+ /// This is marked as succeeding with no output if all commands execute
+ /// safely,
+ /// and failed with some explanation if we aborted executing the commands
+ /// at some point.
+ //------------------------------------------------------------------
+ void HandleCommands(const StringList &commands, ExecutionContext *context,
+ CommandInterpreterRunOptions &options,
+ CommandReturnObject &result);
- void
- SourceInitFile (bool in_cwd,
- CommandReturnObject &result);
-
- bool
- AddCommand (const char *name,
- const lldb::CommandObjectSP &cmd_sp,
- bool can_replace);
-
- bool
- AddUserCommand (std::string name,
- const lldb::CommandObjectSP &cmd_sp,
- bool can_replace);
-
- lldb::CommandObjectSP
- GetCommandSPExact (const char *cmd,
- bool include_aliases);
-
- CommandObject *
- GetCommandObjectExact (const char *cmd_cstr,
- bool include_aliases);
-
- CommandObject *
- GetCommandObject(const char *cmd,
- StringList *matches = nullptr);
-
- bool
- CommandExists (const char *cmd);
-
- bool
- AliasExists (const char *cmd);
-
- bool
- UserCommandExists (const char *cmd);
-
- CommandAlias*
- AddAlias (const char *alias_name,
- lldb::CommandObjectSP& command_obj_sp,
- const char *args_string = nullptr);
-
- // Remove a command if it is removable (python or regex command)
- bool
- RemoveCommand (const char *cmd);
-
- bool
- RemoveAlias (const char *alias_name);
-
- bool
- GetAliasFullName (const char *cmd, std::string &full_name);
-
- bool
- RemoveUser (const char *alias_name);
-
- void
- RemoveAllUser ()
- {
- m_user_dict.clear();
- }
+ //------------------------------------------------------------------
+ /// Execute a list of commands from a file.
+ ///
+ /// @param[in] file
+ /// The file from which to read in commands.
+ /// @param[in,out] context
+ /// The execution context in which to run the commands. Can be nullptr in
+ /// which case the default
+ /// context will be used.
+ /// @param[in] options
+ /// This object holds the options used to control when to stop, whether to
+ /// execute commands,
+ /// etc.
+ /// @param[out] result
+ /// This is marked as succeeding with no output if all commands execute
+ /// safely,
+ /// and failed with some explanation if we aborted executing the commands
+ /// at some point.
+ //------------------------------------------------------------------
+ void HandleCommandsFromFile(FileSpec &file, ExecutionContext *context,
+ CommandInterpreterRunOptions &options,
+ CommandReturnObject &result);
+
+ CommandObject *GetCommandObjectForCommand(llvm::StringRef &command_line);
+
+ // This handles command line completion. You are given a pointer to the
+ // command string buffer, to the current cursor,
+ // and to the end of the string (in case it is not NULL terminated).
+ // You also passed in an StringList object to fill with the returns.
+ // The first element of the array will be filled with the string that you
+ // would need to insert at
+ // the cursor point to complete the cursor point to the longest common
+ // matching prefix.
+ // If you want to limit the number of elements returned, set
+ // max_return_elements to the number of elements
+ // you want returned. Otherwise set max_return_elements to -1.
+ // If you want to start some way into the match list, then set
+ // match_start_point to the desired start
+ // point.
+ // Returns:
+ // -1 if the completion character should be inserted
+ // -2 if the entire command line should be deleted and replaced with
+ // matches.GetStringAtIndex(0)
+ // INT_MAX if the number of matches is > max_return_elements, but it is
+ // expensive to compute.
+ // Otherwise, returns the number of matches.
+ //
+ // FIXME: Only max_return_elements == -1 is supported at present.
+ int HandleCompletion(const char *current_line, const char *cursor,
+ const char *last_char, int match_start_point,
+ int max_return_elements, StringList &matches);
+
+ // This version just returns matches, and doesn't compute the substring. It
+ // is here so the
+ // Help command can call it for the first argument.
+ // word_complete tells whether the completions are considered a "complete"
+ // response (so the
+ // completer should complete the quote & put a space after the word.
+ int HandleCompletionMatches(Args &input, int &cursor_index,
+ int &cursor_char_position, int match_start_point,
+ int max_return_elements, bool &word_complete,
+ StringList &matches);
+
+ int GetCommandNamesMatchingPartialString(const char *cmd_cstr,
+ bool include_aliases,
+ StringList &matches);
+
+ void GetHelp(CommandReturnObject &result,
+ uint32_t types = eCommandTypesAllThem);
+
+ void GetAliasHelp(const char *alias_name, StreamString &help_string);
+
+ void OutputFormattedHelpText(Stream &strm, llvm::StringRef prefix,
+ llvm::StringRef help_text);
+
+ void OutputFormattedHelpText(Stream &stream, llvm::StringRef command_word,
+ llvm::StringRef separator,
+ llvm::StringRef help_text, size_t max_word_len);
+
+ // this mimics OutputFormattedHelpText but it does perform a much simpler
+ // formatting, basically ensuring line alignment. This is only good if you
+ // have some complicated layout for your help text and want as little help as
+ // reasonable in properly displaying it. Most of the times, you simply want
+ // to type some text and have it printed in a reasonable way on screen. If
+ // so, use OutputFormattedHelpText
+ void OutputHelpText(Stream &stream, llvm::StringRef command_word,
+ llvm::StringRef separator, llvm::StringRef help_text,
+ uint32_t max_word_len);
+
+ Debugger &GetDebugger() { return m_debugger; }
+
+ ExecutionContext GetExecutionContext() {
+ const bool thread_and_frame_only_if_stopped = true;
+ return m_exe_ctx_ref.Lock(thread_and_frame_only_if_stopped);
+ }
+
+ void UpdateExecutionContext(ExecutionContext *override_context);
+
+ lldb::PlatformSP GetPlatform(bool prefer_target_platform);
+
+ const char *ProcessEmbeddedScriptCommands(const char *arg);
+
+ void UpdatePrompt(llvm::StringRef prompt);
+
+ bool Confirm(llvm::StringRef message, bool default_answer);
+
+ void LoadCommandDictionary();
+
+ void Initialize();
+
+ void Clear();
+
+ void SetScriptLanguage(lldb::ScriptLanguage lang);
- CommandAlias*
- GetAlias (const char *alias_name);
+ bool HasCommands() const;
- CommandObject *
- BuildAliasResult (const char *alias_name,
- std::string &raw_input_string,
- std::string &alias_result,
- CommandReturnObject &result);
+ bool HasAliases() const;
- bool
- HandleCommand(const char *command_line,
- LazyBool add_to_history,
- CommandReturnObject &result,
- ExecutionContext *override_context = nullptr,
- bool repeat_on_empty_command = true,
- bool no_context_switching = false);
-
- //------------------------------------------------------------------
- /// Execute a list of commands in sequence.
- ///
- /// @param[in] commands
- /// The list of commands to execute.
- /// @param[in,out] context
- /// The execution context in which to run the commands. Can be nullptr in which case the default
- /// context will be used.
- /// @param[in] options
- /// This object holds the options used to control when to stop, whether to execute commands,
- /// etc.
- /// @param[out] result
- /// This is marked as succeeding with no output if all commands execute safely,
- /// and failed with some explanation if we aborted executing the commands at some point.
- //------------------------------------------------------------------
- void
- HandleCommands (const StringList &commands,
- ExecutionContext *context,
- CommandInterpreterRunOptions &options,
- CommandReturnObject &result);
-
- //------------------------------------------------------------------
- /// Execute a list of commands from a file.
- ///
- /// @param[in] file
- /// The file from which to read in commands.
- /// @param[in,out] context
- /// The execution context in which to run the commands. Can be nullptr in which case the default
- /// context will be used.
- /// @param[in] options
- /// This object holds the options used to control when to stop, whether to execute commands,
- /// etc.
- /// @param[out] result
- /// This is marked as succeeding with no output if all commands execute safely,
- /// and failed with some explanation if we aborted executing the commands at some point.
- //------------------------------------------------------------------
- void
- HandleCommandsFromFile (FileSpec &file,
- ExecutionContext *context,
- CommandInterpreterRunOptions &options,
- CommandReturnObject &result);
-
- CommandObject *
- GetCommandObjectForCommand (std::string &command_line);
-
- // This handles command line completion. You are given a pointer to the command string buffer, to the current cursor,
- // and to the end of the string (in case it is not NULL terminated).
- // You also passed in an StringList object to fill with the returns.
- // The first element of the array will be filled with the string that you would need to insert at
- // the cursor point to complete the cursor point to the longest common matching prefix.
- // If you want to limit the number of elements returned, set max_return_elements to the number of elements
- // you want returned. Otherwise set max_return_elements to -1.
- // If you want to start some way into the match list, then set match_start_point to the desired start
- // point.
- // Returns:
- // -1 if the completion character should be inserted
- // -2 if the entire command line should be deleted and replaced with matches.GetStringAtIndex(0)
- // INT_MAX if the number of matches is > max_return_elements, but it is expensive to compute.
- // Otherwise, returns the number of matches.
- //
- // FIXME: Only max_return_elements == -1 is supported at present.
- int
- HandleCompletion (const char *current_line,
- const char *cursor,
- const char *last_char,
- int match_start_point,
- int max_return_elements,
- StringList &matches);
-
- // This version just returns matches, and doesn't compute the substring. It is here so the
- // Help command can call it for the first argument.
- // word_complete tells whether the completions are considered a "complete" response (so the
- // completer should complete the quote & put a space after the word.
- int
- HandleCompletionMatches (Args &input,
- int &cursor_index,
- int &cursor_char_position,
- int match_start_point,
- int max_return_elements,
- bool &word_complete,
- StringList &matches);
-
- int
- GetCommandNamesMatchingPartialString (const char *cmd_cstr,
- bool include_aliases,
- StringList &matches);
-
- void
- GetHelp (CommandReturnObject &result,
- uint32_t types = eCommandTypesAllThem);
-
- void
- GetAliasHelp (const char *alias_name,
- StreamString &help_string);
-
- void
- OutputFormattedHelpText (Stream &strm,
- const char *prefix,
- const char *help_text);
-
- void
- OutputFormattedHelpText (Stream &stream,
- const char *command_word,
- const char *separator,
- const char *help_text,
- size_t max_word_len);
-
- // this mimics OutputFormattedHelpText but it does perform a much simpler
- // formatting, basically ensuring line alignment. This is only good if you have
- // some complicated layout for your help text and want as little help as reasonable
- // in properly displaying it. Most of the times, you simply want to type some text
- // and have it printed in a reasonable way on screen. If so, use OutputFormattedHelpText
- void
- OutputHelpText (Stream &stream,
- const char *command_word,
- const char *separator,
- const char *help_text,
- uint32_t max_word_len);
-
- Debugger &
- GetDebugger ()
- {
- return m_debugger;
- }
-
- ExecutionContext
- GetExecutionContext()
- {
- const bool thread_and_frame_only_if_stopped = true;
- return m_exe_ctx_ref.Lock(thread_and_frame_only_if_stopped);
- }
-
- void
- UpdateExecutionContext (ExecutionContext *override_context);
-
- lldb::PlatformSP
- GetPlatform (bool prefer_target_platform);
-
- const char *
- ProcessEmbeddedScriptCommands (const char *arg);
-
- void
- UpdatePrompt (const char *);
-
- bool
- Confirm (const char *message,
- bool default_answer);
-
- void
- LoadCommandDictionary ();
-
- void
- Initialize ();
-
- void
- Clear ();
-
- void
- SetScriptLanguage (lldb::ScriptLanguage lang);
-
- bool
- HasCommands ();
-
- bool
- HasAliases ();
-
- bool
- HasUserCommands ();
-
- bool
- HasAliasOptions ();
-
- void
- BuildAliasCommandArgs (CommandObject *alias_cmd_obj,
- const char *alias_name,
- Args &cmd_args,
- std::string &raw_input_string,
- CommandReturnObject &result);
-
- int
- GetOptionArgumentPosition (const char *in_string);
-
- ScriptInterpreter *
- GetScriptInterpreter(bool can_create = true);
-
- void
- SetScriptInterpreter();
-
- void
- SkipLLDBInitFiles (bool skip_lldbinit_files)
- {
- m_skip_lldbinit_files = skip_lldbinit_files;
- }
+ bool HasUserCommands() const;
- void
- SkipAppInitFiles (bool skip_app_init_files)
- {
- m_skip_app_init_files = m_skip_lldbinit_files;
- }
+ bool HasAliasOptions() const;
- bool
- GetSynchronous ();
-
- void
- FindCommandsForApropos (const char *word,
- StringList &commands_found,
- StringList &commands_help,
- bool search_builtin_commands,
- bool search_user_commands,
- bool search_alias_commands);
-
- bool
- GetBatchCommandMode () { return m_batch_command_mode; }
-
- bool
- SetBatchCommandMode (bool value) {
- const bool old_value = m_batch_command_mode;
- m_batch_command_mode = value;
- return old_value;
- }
-
- void
- ChildrenTruncated ()
- {
- if (m_truncation_warning == eNoTruncation)
- m_truncation_warning = eUnwarnedTruncation;
- }
-
- bool
- TruncationWarningNecessary ()
- {
- return (m_truncation_warning == eUnwarnedTruncation);
- }
-
- void
- TruncationWarningGiven ()
- {
- m_truncation_warning = eWarnedTruncation;
- }
-
- const char *
- TruncationWarningText ()
- {
- return "*** Some of your variables have more members than the debugger will show by default. To show all of them, you can either use the --show-all-children option to %s or raise the limit by changing the target.max-children-count setting.\n";
- }
-
- const CommandHistory&
- GetCommandHistory () const
- {
- return m_command_history;
- }
-
- CommandHistory&
- GetCommandHistory ()
- {
- return m_command_history;
- }
-
- bool
- IsActive ();
-
- void
- RunCommandInterpreter (bool auto_handle_events,
- bool spawn_thread,
- CommandInterpreterRunOptions &options);
- void
- GetLLDBCommandsFromIOHandler (const char *prompt,
- IOHandlerDelegate &delegate,
- bool asynchronously,
- void *baton);
-
- void
- GetPythonCommandsFromIOHandler (const char *prompt,
+ void BuildAliasCommandArgs(CommandObject *alias_cmd_obj,
+ const char *alias_name, Args &cmd_args,
+ std::string &raw_input_string,
+ CommandReturnObject &result);
+
+ int GetOptionArgumentPosition(const char *in_string);
+
+ ScriptInterpreter *GetScriptInterpreter(bool can_create = true);
+
+ void SetScriptInterpreter();
+
+ void SkipLLDBInitFiles(bool skip_lldbinit_files) {
+ m_skip_lldbinit_files = skip_lldbinit_files;
+ }
+
+ void SkipAppInitFiles(bool skip_app_init_files) {
+ m_skip_app_init_files = m_skip_lldbinit_files;
+ }
+
+ bool GetSynchronous();
+
+ void FindCommandsForApropos(llvm::StringRef word, StringList &commands_found,
+ StringList &commands_help,
+ bool search_builtin_commands,
+ bool search_user_commands,
+ bool search_alias_commands);
+
+ bool GetBatchCommandMode() { return m_batch_command_mode; }
+
+ bool SetBatchCommandMode(bool value) {
+ const bool old_value = m_batch_command_mode;
+ m_batch_command_mode = value;
+ return old_value;
+ }
+
+ void ChildrenTruncated() {
+ if (m_truncation_warning == eNoTruncation)
+ m_truncation_warning = eUnwarnedTruncation;
+ }
+
+ bool TruncationWarningNecessary() {
+ return (m_truncation_warning == eUnwarnedTruncation);
+ }
+
+ void TruncationWarningGiven() { m_truncation_warning = eWarnedTruncation; }
+
+ const char *TruncationWarningText() {
+ return "*** Some of your variables have more members than the debugger "
+ "will show by default. To show all of them, you can either use the "
+ "--show-all-children option to %s or raise the limit by changing "
+ "the target.max-children-count setting.\n";
+ }
+
+ const CommandHistory &GetCommandHistory() const { return m_command_history; }
+
+ CommandHistory &GetCommandHistory() { return m_command_history; }
+
+ bool IsActive();
+
+ void RunCommandInterpreter(bool auto_handle_events, bool spawn_thread,
+ CommandInterpreterRunOptions &options);
+ void GetLLDBCommandsFromIOHandler(const char *prompt,
IOHandlerDelegate &delegate,
- bool asynchronously,
- void *baton);
-
- const char *
- GetCommandPrefix ();
-
- //------------------------------------------------------------------
- // Properties
- //------------------------------------------------------------------
- bool
- GetExpandRegexAliases () const;
-
- bool
- GetPromptOnQuit () const;
-
- void
- SetPromptOnQuit (bool b);
-
- void
- ResolveCommand(const char *command_line, CommandReturnObject &result);
-
- bool
- GetStopCmdSourceOnError () const;
-
- uint32_t
- GetNumErrors() const
- {
- return m_num_errors;
- }
+ bool asynchronously, void *baton);
- bool
- GetQuitRequested () const
- {
- return m_quit_requested;
- }
+ void GetPythonCommandsFromIOHandler(const char *prompt,
+ IOHandlerDelegate &delegate,
+ bool asynchronously, void *baton);
- lldb::IOHandlerSP
- GetIOHandler(bool force_create = false, CommandInterpreterRunOptions *options = nullptr);
+ const char *GetCommandPrefix();
+
+ //------------------------------------------------------------------
+ // Properties
+ //------------------------------------------------------------------
+ bool GetExpandRegexAliases() const;
+
+ bool GetPromptOnQuit() const;
+
+ void SetPromptOnQuit(bool b);
+
+ void ResolveCommand(const char *command_line, CommandReturnObject &result);
+
+ bool GetStopCmdSourceOnError() const;
+
+ uint32_t GetNumErrors() const { return m_num_errors; }
+
+ bool GetQuitRequested() const { return m_quit_requested; }
+
+ lldb::IOHandlerSP
+ GetIOHandler(bool force_create = false,
+ CommandInterpreterRunOptions *options = nullptr);
+
+ bool GetStoppedForCrash() const { return m_stopped_for_crash; }
+
+ bool GetSpaceReplPrompts() const;
- bool
- GetStoppedForCrash () const
- {
- return m_stopped_for_crash;
- }
-
- bool
- GetSpaceReplPrompts () const;
-
protected:
- friend class Debugger;
-
- //------------------------------------------------------------------
- // IOHandlerDelegate functions
- //------------------------------------------------------------------
- void
- IOHandlerInputComplete(IOHandler &io_handler,
- std::string &line) override;
-
- ConstString
- IOHandlerGetControlSequence(char ch) override
- {
- if (ch == 'd')
- return ConstString("quit\n");
- return ConstString();
- }
-
- bool
- IOHandlerInterrupt(IOHandler &io_handler) override;
+ friend class Debugger;
+
+ //------------------------------------------------------------------
+ // IOHandlerDelegate functions
+ //------------------------------------------------------------------
+ void IOHandlerInputComplete(IOHandler &io_handler,
+ std::string &line) override;
+
+ ConstString IOHandlerGetControlSequence(char ch) override {
+ if (ch == 'd')
+ return ConstString("quit\n");
+ return ConstString();
+ }
+
+ bool IOHandlerInterrupt(IOHandler &io_handler) override;
+
+ size_t GetProcessOutput();
- size_t
- GetProcessOutput ();
+ void SetSynchronous(bool value);
- void
- SetSynchronous (bool value);
+ lldb::CommandObjectSP GetCommandSP(llvm::StringRef cmd,
+ bool include_aliases = true,
+ bool exact = true,
+ StringList *matches = nullptr) const;
- lldb::CommandObjectSP
- GetCommandSP(const char *cmd, bool include_aliases = true, bool exact = true, StringList *matches = nullptr);
-
private:
- Error
- PreprocessCommand (std::string &command);
-
- // Completely resolves aliases and abbreviations, returning a pointer to the
- // final command object and updating command_line to the fully substituted
- // and translated command.
- CommandObject *
- ResolveCommandImpl(std::string &command_line, CommandReturnObject &result);
-
- void
- FindCommandsForApropos (const char *word,
- StringList &commands_found,
- StringList &commands_help,
- CommandObject::CommandMap &command_map);
-
- Debugger &m_debugger; // The debugger session that this interpreter is associated with
- ExecutionContextRef m_exe_ctx_ref; // The current execution context to use when handling commands
- bool m_synchronous_execution;
- bool m_skip_lldbinit_files;
- bool m_skip_app_init_files;
- CommandObject::CommandMap m_command_dict; // Stores basic built-in commands (they cannot be deleted, removed or overwritten).
- CommandObject::CommandMap m_alias_dict; // Stores user aliases/abbreviations for commands
- CommandObject::CommandMap m_user_dict; // Stores user-defined commands
- CommandHistory m_command_history;
- std::string m_repeat_command; // Stores the command that will be executed for an empty command string.
- lldb::ScriptInterpreterSP m_script_interpreter_sp;
- lldb::IOHandlerSP m_command_io_handler_sp;
- char m_comment_char;
- bool m_batch_command_mode;
- ChildrenTruncatedWarningStatus m_truncation_warning; // Whether we truncated children and whether the user has been told
- uint32_t m_command_source_depth;
- std::vector<uint32_t> m_command_source_flags;
- uint32_t m_num_errors;
- bool m_quit_requested;
- bool m_stopped_for_crash;
+ Error PreprocessCommand(std::string &command);
+
+ // Completely resolves aliases and abbreviations, returning a pointer to the
+ // final command object and updating command_line to the fully substituted
+ // and translated command.
+ CommandObject *ResolveCommandImpl(std::string &command_line,
+ CommandReturnObject &result);
+
+ void FindCommandsForApropos(llvm::StringRef word, StringList &commands_found,
+ StringList &commands_help,
+ CommandObject::CommandMap &command_map);
+
+ Debugger &m_debugger; // The debugger session that this interpreter is
+ // associated with
+ ExecutionContextRef m_exe_ctx_ref; // The current execution context to use
+ // when handling commands
+ bool m_synchronous_execution;
+ bool m_skip_lldbinit_files;
+ bool m_skip_app_init_files;
+ CommandObject::CommandMap m_command_dict; // Stores basic built-in commands
+ // (they cannot be deleted, removed
+ // or overwritten).
+ CommandObject::CommandMap
+ m_alias_dict; // Stores user aliases/abbreviations for commands
+ CommandObject::CommandMap m_user_dict; // Stores user-defined commands
+ CommandHistory m_command_history;
+ std::string m_repeat_command; // Stores the command that will be executed for
+ // an empty command string.
+ lldb::ScriptInterpreterSP m_script_interpreter_sp;
+ std::mutex m_script_interpreter_mutex;
+ lldb::IOHandlerSP m_command_io_handler_sp;
+ char m_comment_char;
+ bool m_batch_command_mode;
+ ChildrenTruncatedWarningStatus m_truncation_warning; // Whether we truncated
+ // children and whether
+ // the user has been told
+ uint32_t m_command_source_depth;
+ std::vector<uint32_t> m_command_source_flags;
+ uint32_t m_num_errors;
+ bool m_quit_requested;
+ bool m_stopped_for_crash;
};
} // namespace lldb_private