aboutsummaryrefslogtreecommitdiff
path: root/gdb/maint.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-09-22 10:38:16 -0400
committerSimon Marchi <simon.marchi@efficios.com>2021-10-28 10:48:16 -0400
commita1ff87d77ca7fa851170702fd972ae3d31f2e378 (patch)
tree796e94e5e02072e993e0e6569e302b76d31d4116 /gdb/maint.c
parent2e466f72c43a515f4dac5c65cca5cdf3f24dad21 (diff)
downloadgdb-a1ff87d77ca7fa851170702fd972ae3d31f2e378.zip
gdb-a1ff87d77ca7fa851170702fd972ae3d31f2e378.tar.gz
gdb-a1ff87d77ca7fa851170702fd972ae3d31f2e378.tar.bz2
gdb: add "maint set/show selftest verbose" commands and use process_options
I saw the new -verbose switch to "maint selftests" and thought it would be nice for it to use the option framework. For example, that makes having completion easy. It's not that high value, given this is a maintenance command, but I had never used the framework myself, so it was a good way to practice. This patch also adds the "maint set/show selftest verbose" setting. It would be possible to use option framework without adding the setting, but using the framework makes adding the option almost trivial, so I thought why not. Change-Id: I6687faa0713ff3da60b398253211777100094144
Diffstat (limited to 'gdb/maint.c')
-rw-r--r--gdb/maint.c74
1 files changed, 69 insertions, 5 deletions
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 ();
}