11#include "llvm/ADT/StringRef.h"
25#define LLDB_OPTIONS_settings_set
26#include "CommandOptions.inc"
32 "Set the value of the specified debugger setting.") {
44 arg1.push_back(var_name_arg);
52 arg2.push_back(value_arg);
59 "\nWhen setting a dictionary or array variable, you can set multiple entries \
60at once by giving the values to the set command. For example:"
63(lldb) settings set target.run-args value1 value2 value3
64(lldb) settings set target.env-vars MYPATH=~/.:/usr/bin SOME_ENV_VAR=12345
66(lldb) settings show target.run-args
70(lldb) settings show target.env-vars
75 "Warning: The 'set' command re-sets the entire array or dictionary. If you \
76just want to add, remove or update individual values (or add something to \
77the end), use one of the other settings sub-commands: append, replace, \
78insert-before or insert-after.");
89 class CommandOptions :
public Options {
100 switch (short_option) {
111 llvm_unreachable(
"Unimplemented option");
124 return llvm::ArrayRef(g_settings_set_options);
138 const char *arg =
nullptr;
139 size_t setting_var_idx;
140 for (setting_var_idx = 0; setting_var_idx < argc; ++setting_var_idx) {
142 if (arg && arg[0] !=
'-')
162 const char *setting_var_name =
175 Args cmd_args(command);
182 const size_t argc = cmd_args.GetArgumentCount();
185 result.
AppendError(
"'settings set' takes more arguments");
189 const char *var_name = cmd_args.GetArgumentAtIndex(0);
190 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
192 "'settings set' command requires a valid variable name");
210 llvm::StringRef var_value(command);
211 var_value = var_value.split(var_name).second.ltrim();
216 var_name, var_value);
218 if (
error.Success()) {
227 var_name, var_value);
243#define LLDB_OPTIONS_settings_show
244#include "CommandOptions.inc"
250 "Show matching debugger settings and their current "
251 "values. Defaults to showing all settings.") {
266 switch (short_option) {
274 llvm_unreachable(
"Unimplemented option");
285 return g_settings_show_options;
305 for (
const auto &arg : args) {
310 if (value_sp && value_sp->IsDefault())
315 if (
error.Success()) {
332#define LLDB_OPTIONS_settings_write
333#include "CommandOptions.inc"
339 interpreter,
"settings export",
340 "Write matching debugger settings and their "
341 "current values to a file that can be read in with "
342 "\"settings read\". Defaults to writing all settings.",
362 switch (short_option) {
370 llvm_unreachable(
"Unimplemented option");
382 return llvm::ArrayRef(g_settings_write_options);
394 std::string path(file_spec.
GetPath());
402 lldb::eFilePermissionsFileDefault);
419 for (
const auto &arg : args) {
422 if (!
error.Success()) {
435#define LLDB_OPTIONS_settings_read
436#include "CommandOptions.inc"
442 interpreter,
"settings read",
443 "Read settings previously saved to a file with \"settings write\".",
461 switch (short_option) {
466 llvm_unreachable(
"Unimplemented option");
477 return llvm::ArrayRef(g_settings_read_options);
507 "List and describe matching debugger settings. "
508 "Defaults to all listing all settings.",
522 arg.push_back(var_name_arg);
523 arg.push_back(prefix_name_arg);
545 const bool dump_qualified_name =
true;
548 const char *property_path = arg.c_str();
556 dump_qualified_name);
575 "Remove a value from a setting, specified by array "
576 "index or dictionary key.") {
589 arg1.push_back(var_name_arg);
600 arg2.push_back(index_arg);
601 arg2.push_back(key_arg);
626 Args cmd_args(command);
634 result.
AppendError(
"'settings remove' takes an array or dictionary item, "
635 "or an array followed by one or more indexes, or a "
636 "dictionary followed by one or more key names to "
642 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
644 "'settings remove' command requires a valid variable name");
649 llvm::StringRef var_value(command);
650 var_value = var_value.split(var_name).second.trim();
666 "Replace the debugger setting value specified by "
667 "array index or dictionary key.") {
682 arg1.push_back(var_name_arg);
693 arg2.push_back(index_arg);
694 arg2.push_back(key_arg);
702 arg3.push_back(value_arg);
731 Args cmd_args(command);
733 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
734 result.
AppendError(
"'settings replace' command requires a valid variable "
735 "name; No value supplied");
740 llvm::StringRef var_value(command);
741 var_value = var_value.split(var_name).second.trim();
759 "Insert one or more values into an debugger array "
760 "setting immediately before the specified element "
775 arg1.push_back(var_name_arg);
783 arg2.push_back(index_arg);
791 arg3.push_back(value_arg);
820 Args cmd_args(command);
824 result.
AppendError(
"'settings insert-before' takes more arguments");
829 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
830 result.
AppendError(
"'settings insert-before' command requires a valid "
831 "variable name; No value supplied");
836 llvm::StringRef var_value(command);
837 var_value = var_value.split(var_name).second.trim();
853 "Insert one or more values into a debugger array "
854 "settings after the specified element index.") {
868 arg1.push_back(var_name_arg);
876 arg2.push_back(index_arg);
884 arg3.push_back(value_arg);
913 Args cmd_args(command);
917 result.
AppendError(
"'settings insert-after' takes more arguments");
922 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
923 result.
AppendError(
"'settings insert-after' command requires a valid "
924 "variable name; No value supplied");
929 llvm::StringRef var_value(command);
930 var_value = var_value.split(var_name).second.trim();
946 "Append one or more values to a debugger array, "
947 "dictionary, or string setting.") {
959 arg1.push_back(var_name_arg);
967 arg2.push_back(value_arg);
994 Args cmd_args(command);
998 result.
AppendError(
"'settings append' takes more arguments");
1003 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
1004 result.
AppendError(
"'settings append' command requires a valid variable "
1005 "name; No value supplied");
1013 llvm::StringRef var_value(command);
1014 var_value = var_value.split(var_name).second.trim();
1025#define LLDB_OPTIONS_settings_clear
1026#include "CommandOptions.inc"
1032 interpreter,
"settings clear",
1033 "Clear a debugger setting array, dictionary, or string. "
1034 "If '-a' option is specified, it clears all settings.", nullptr) {
1061 switch (short_option) {
1066 llvm_unreachable(
"Unimplemented option");
1076 return llvm::ArrayRef(g_settings_clear_options);
1089 result.
AppendError(
"'settings clear --all' doesn't take any arguments");
1097 result.
AppendError(
"'settings clear' takes exactly one argument");
1102 if ((var_name ==
nullptr) || (var_name[0] ==
'\0')) {
1103 result.
AppendError(
"'settings clear' command requires a valid variable "
1104 "name; No value supplied");
1124 "Commands for managing LLDB settings.",
1125 "settings <subcommand> [<command-options>]") {
static llvm::raw_ostream & error(Stream &strm)
#define LLDB_LOG(log,...)
The LLDB_LOG* macros defined below are the way to emit log messages.
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
CommandObjectSettingsAppend(CommandInterpreter &interpreter)
~CommandObjectSettingsAppend() override=default
void DoExecute(llvm::StringRef command, CommandReturnObject &result) override
bool WantsCompletion() override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
void OptionParsingStarting(ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandOptions() override=default
Options * GetOptions() override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectSettingsClear() override=default
void DoExecute(Args &command, CommandReturnObject &result) override
CommandObjectSettingsClear(CommandInterpreter &interpreter)
~CommandObjectSettingsInsertAfter() override=default
void DoExecute(llvm::StringRef command, CommandReturnObject &result) override
CommandObjectSettingsInsertAfter(CommandInterpreter &interpreter)
bool WantsCompletion() override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectSettingsInsertBefore() override=default
CommandObjectSettingsInsertBefore(CommandInterpreter &interpreter)
bool WantsCompletion() override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
void DoExecute(llvm::StringRef command, CommandReturnObject &result) override
CommandObjectSettingsList(CommandInterpreter &interpreter)
void DoExecute(Args &args, CommandReturnObject &result) override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectSettingsList() override=default
~CommandOptions() override=default
void OptionParsingStarting(ExecutionContext *execution_context) override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandObjectSettingsRead() override=default
CommandObjectSettingsRead(CommandInterpreter &interpreter)
Options * GetOptions() override
void DoExecute(Args &command, CommandReturnObject &result) override
void DoExecute(llvm::StringRef command, CommandReturnObject &result) override
bool WantsCompletion() override
CommandObjectSettingsRemove(CommandInterpreter &interpreter)
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
~CommandObjectSettingsRemove() override=default
bool WantsCompletion() override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
void DoExecute(llvm::StringRef command, CommandReturnObject &result) override
CommandObjectSettingsReplace(CommandInterpreter &interpreter)
~CommandObjectSettingsReplace() override=default
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
void OptionParsingStarting(ExecutionContext *execution_context) override
~CommandOptions() override=default
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
void HandleArgumentCompletion(CompletionRequest &request, OptionElementVector &opt_element_vector) override
The default version handles argument definitions that have only one argument type,...
Options * GetOptions() override
CommandObjectSettingsSet(CommandInterpreter &interpreter)
~CommandObjectSettingsSet() override=default
bool WantsCompletion() override
void DoExecute(llvm::StringRef command, CommandReturnObject &result) override
void OptionParsingStarting(ExecutionContext *execution_context) override
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
~CommandOptions() override=default
Options * GetOptions() override
void DoExecute(Args &args, CommandReturnObject &result) override
CommandObjectSettingsShow(CommandInterpreter &interpreter)
~CommandObjectSettingsShow() override=default
llvm::ArrayRef< OptionDefinition > GetDefinitions() override
~CommandOptions() override=default
void OptionParsingStarting(ExecutionContext *execution_context) override
Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, ExecutionContext *execution_context) override
Set the value of an option.
void DoExecute(Args &args, CommandReturnObject &result) override
~CommandObjectSettingsWrite() override=default
CommandObjectSettingsWrite(CommandInterpreter &interpreter)
Options * GetOptions() override
A command line argument class.
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx.
static bool InvokeCommonCompletionCallbacks(CommandInterpreter &interpreter, uint32_t completion_mask, lldb_private::CompletionRequest &request, SearchFilter *searcher)
void SetPrintErrors(bool print_errors)
void SetEchoCommands(bool echo_commands)
void SetAddToHistory(bool add_to_history)
void SetStopOnError(bool stop_on_error)
void SetPrintResults(bool print_results)
~CommandObjectMultiwordSettings() override
CommandObjectMultiwordSettings(CommandInterpreter &interpreter)
bool LoadSubCommand(llvm::StringRef cmd_name, const lldb::CommandObjectSP &command_obj) override
CommandObjectMultiword(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
friend class CommandInterpreter
CommandObjectParsed(CommandInterpreter &interpreter, const char *name, const char *help=nullptr, const char *syntax=nullptr, uint32_t flags=0)
CommandObjectRaw(CommandInterpreter &interpreter, llvm::StringRef name, llvm::StringRef help="", llvm::StringRef syntax="", uint32_t flags=0)
std::vector< CommandArgumentData > CommandArgumentEntry
virtual void SetHelpLong(llvm::StringRef str)
void AddSimpleArgumentList(lldb::CommandArgumentType arg_type, ArgumentRepetitionType repetition_type=eArgRepeatPlain)
ExecutionContext m_exe_ctx
std::vector< CommandArgumentEntry > m_arguments
CommandInterpreter & GetCommandInterpreter()
CommandInterpreter & m_interpreter
bool ParseOptions(Args &args, CommandReturnObject &result)
void AppendError(llvm::StringRef in_string)
void SetStatus(lldb::ReturnStatus status)
void AppendErrorWithFormat(const char *format,...) __attribute__((format(printf
lldb::ReturnStatus GetStatus() const
Stream & GetOutputStream()
"lldb/Utility/ArgCompletionRequest.h"
const Args & GetParsedLine() const
size_t GetCursorIndex() const
Status SetPropertyValue(const ExecutionContext *exe_ctx, VarSetOperationType op, llvm::StringRef property_path, llvm::StringRef value) override
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
size_t GetPath(char *path, size_t max_path_length, bool denormalize=true) const
Extract the full path to the file.
static FileSystem & Instance()
void Resolve(llvm::SmallVectorImpl< char > &path, bool force_make_absolute=false)
Resolve path to make it canonical.
bool IsValid() const override
IsValid.
@ eDumpOptionDefaultValue
A command line option parsing protocol class.
std::vector< Option > m_getopt_table
virtual void DumpAllDescriptions(CommandInterpreter &interpreter, Stream &strm) const
virtual void DumpAllPropertyValues(const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask, bool is_json=false)
virtual lldb::OptionValueSP GetPropertyValue(const ExecutionContext *exe_ctx, llvm::StringRef property_path, Status &error) const
lldb::OptionValuePropertiesSP GetValueProperties() const
size_t EOL()
Output and End of Line character to the stream.
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
std::vector< OptionArgElement > OptionElementVector
@ eVarSetOperationReplace
@ eVarSetOperationInsertBefore
@ eVarSetOperationInsertAfter
@ eSettingsNameCompletion
std::shared_ptr< lldb_private::CommandObject > CommandObjectSP
@ eReturnStatusSuccessFinishResult
@ eReturnStatusSuccessFinishNoResult
@ eArgTypeSettingVariableName
std::shared_ptr< lldb_private::OptionValue > OptionValueSP
Used to build individual command argument lists.
ArgumentRepetitionType arg_repetition
lldb::CommandArgumentType arg_type