diff options
-rw-r--r-- | gdb/doc/gdb.texinfo | 7 | ||||
-rw-r--r-- | gdb/maint.c | 74 |
2 files changed, 76 insertions, 5 deletions
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 4fda34e..d52cec0 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -39478,6 +39478,13 @@ If a @var{filter} is passed, only the tests with @var{filter} in their name will be ran. If @code{-verbose} is passed, the self tests can be more verbose. +@kindex maint set selftest verbose +@kindex maint show selftest verbose +@cindex self tests +@item maint set selftest verbose +@item maint show selftest verbose +Control whether self tests are run verbosely or not. + @kindex maint info selftests @cindex self tests @item maint info selftests diff --git a/gdb/maint.c b/gdb/maint.c index 8aae53b..4e75e47 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -1119,7 +1119,34 @@ set_per_command_cmd (const char *args, int from_tty) } } - +/* Options affecting the "maintenance selftest" command. */ + +struct maintenance_selftest_options +{ + bool verbose = false; +} user_maintenance_selftest_options; + +static const gdb::option::option_def maintenance_selftest_option_defs[] = { + gdb::option::boolean_option_def<maintenance_selftest_options> { + "verbose", + [] (maintenance_selftest_options *opt) { return &opt->verbose; }, + nullptr, + N_("Set whether selftests run in verbose mode."), + N_("Show whether selftests run in verbose mode."), + N_("\ +When on, selftests may print verbose information."), + }, +}; + +/* Make option groups for the "maintenance selftest" command. */ + +static std::array<gdb::option::option_def_group, 1> +make_maintenance_selftest_option_group (maintenance_selftest_options *opts) +{ + return {{ + {{maintenance_selftest_option_defs}, opts}, + }}; +} /* The "maintenance selftest" command. */ @@ -1127,15 +1154,32 @@ static void maintenance_selftest (const char *args, int from_tty) { #if GDB_SELF_TEST - bool verbose = args != nullptr && check_for_argument (&args, "-verbose"); + maintenance_selftest_options opts = user_maintenance_selftest_options; + auto grp = make_maintenance_selftest_option_group (&opts); + gdb::option::process_options + (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp); gdb_argv argv (args); - selftests::run_tests (argv.as_array_view (), verbose); + selftests::run_tests (argv.as_array_view (), opts.verbose); #else printf_filtered (_("\ Selftests have been disabled for this build.\n")); #endif } +/* Completer for the "maintenance selftest" command. */ + +static void +maintenance_selftest_completer (cmd_list_element *cmd, + completion_tracker &tracker, + const char *text, + const char *word) +{ + auto grp = make_maintenance_selftest_option_group (nullptr); + + gdb::option::complete_options + (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, grp); +} + static void maintenance_info_selftests (const char *arg, int from_tty) { @@ -1369,12 +1413,15 @@ This is used by the testsuite to check the command deprecator.\n\ You probably shouldn't use this."), &maintenancelist); - add_cmd ("selftest", class_maintenance, maintenance_selftest, _("\ + cmd_list_element *maintenance_selftest_cmd + = add_cmd ("selftest", class_maintenance, maintenance_selftest, _("\ Run gdb's unit tests.\n\ Usage: maintenance selftest [FILTER]\n\ This will run any unit tests that were built in to gdb.\n\ If a filter is given, only the tests with that value in their name will ran."), - &maintenancelist); + &maintenancelist); + set_cmd_completer_handle_brkchars (maintenance_selftest_cmd, + maintenance_selftest_completer); add_cmd ("selftests", class_maintenance, maintenance_info_selftests, _("List the registered selftests."), &maintenanceinfolist); @@ -1401,5 +1448,22 @@ such as demangling symbol names."), &maintenance_set_cmdlist, &maintenance_show_cmdlist); + /* Add the "maint set/show selftest" commands. */ + static cmd_list_element *set_selftest_cmdlist = nullptr; + static cmd_list_element *show_selftest_cmdlist = nullptr; + + add_setshow_prefix_cmd ("selftest", class_maintenance, + _("Self tests-related settings."), + _("Self tests-related settings."), + &set_selftest_cmdlist, &show_selftest_cmdlist, + &maintenance_set_cmdlist, &maintenance_show_cmdlist); + + /* Add setting commands matching "maintenance selftest" options. */ + gdb::option::add_setshow_cmds_for_options (class_maintenance, + &user_maintenance_selftest_options, + maintenance_selftest_option_defs, + &set_selftest_cmdlist, + &show_selftest_cmdlist); + update_thread_pool_size (); } |