From a02fcd08ddc5080696248ed7fb4bf50a24763431 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Tue, 9 May 2023 15:18:51 +0100 Subject: [PATCH] gdb: fix error message for $_gdb_maint_setting I spotted this behaviour: (gdb) p $_gdb_maint_setting("xxx") First argument of $_gdb_maint_setting must be a valid setting of the 'show' command. Notice that GDB claims I need to use a setting from the 'show' command, which isn't correct for $_gdb_maint_setting, in this case I need to use a setting from 'maintenance show'. This same issue is present for $_gdb_maint_setting_str. This commit fixes this minor issue. Approved-By: Simon Marchi --- gdb/cli/cli-cmds.c | 12 ++++++++++-- gdb/testsuite/gdb.base/settings.exp | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index d466cc6c34d..b7b65303a0b 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -2219,8 +2219,16 @@ setting_cmd (const char *fnname, struct cmd_list_element *showlist, cmd_list_element *cmd = lookup_cmd (&a0, showlist, "", NULL, -1, 0); if (cmd == nullptr || cmd->type != show_cmd) - error (_("First argument of %s must be a " - "valid setting of the 'show' command."), fnname); + { + gdb_assert (showlist->prefix != nullptr); + std::vector components + = showlist->prefix->command_components (); + std::string full_name = components[0]; + for (int i = 1; i < components.size (); ++i) + full_name += " " + components[i]; + error (_("First argument of %s must be a valid setting of the " + "'%s' command."), fnname, full_name.c_str ()); + } return cmd; } diff --git a/gdb/testsuite/gdb.base/settings.exp b/gdb/testsuite/gdb.base/settings.exp index eb127d246d2..6248ba3e495 100644 --- a/gdb/testsuite/gdb.base/settings.exp +++ b/gdb/testsuite/gdb.base/settings.exp @@ -625,6 +625,19 @@ proc test-string {variant} { test_gdb_complete_none "$show_cmd " } +# Check that $_gdb_setting & co report the correct error strings. +proc test-setting-error {} { + gdb_test {print $_gdb_setting("xxx")} \ + "First argument of \\\$_gdb_setting must be a valid setting of the 'show' command\\." + gdb_test {print $_gdb_setting_str("xxx")} \ + "First argument of \\\$_gdb_setting_str must be a valid setting of the 'show' command\\." + + gdb_test {print $_gdb_maint_setting("xxx")} \ + "First argument of \\\$_gdb_maint_setting must be a valid setting of the 'maintenance show' command\\." + gdb_test {print $_gdb_maint_setting_str("xxx")} \ + "First argument of \\\$_gdb_maint_setting_str must be a valid setting of the 'maintenance show' command\\." +} + foreach variant { uinteger integer @@ -651,3 +664,5 @@ foreach variant { test-string $variant } } + +test-setting-error -- 2.30.2