aboutsummaryrefslogtreecommitdiff
path: root/gdb/cli
diff options
context:
space:
mode:
authorPhilippe Waroquiers <philippe.waroquiers@skynet.be>2020-05-10 08:36:29 +0200
committerPhilippe Waroquiers <philippe.waroquiers@skynet.be>2020-05-15 22:17:45 +0200
commit7aa1b46f4321eb2c2054c4d8985f2d8e3c18aa36 (patch)
tree6113a21731ac4c5b287f5c5fe32d30b57458eba7 /gdb/cli
parent89bcba74f89baceba3fa7387622e3d60e1de02e8 (diff)
downloadgdb-7aa1b46f4321eb2c2054c4d8985f2d8e3c18aa36.zip
gdb-7aa1b46f4321eb2c2054c4d8985f2d8e3c18aa36.tar.gz
gdb-7aa1b46f4321eb2c2054c4d8985f2d8e3c18aa36.tar.bz2
Fix inconsistent output of prefix and bugs in 'show' command
cmd_show_list function implements the 'show' command. cmd_show_list output is inconsistent: it sometimes shows a prefix and sometimes does not. For example, in the below, you see that there is a prefix before each value, except for 'enabled'. (gdb) show style style address background: The "address" style background color is: none style address foreground: The "address" style foreground color is: blue style address intensity: The "address" style display intensity is: normal enabled: CLI output styling is enabled. style filename background: The "filename" style background color is: none ... There are other inconsistencies or bugs e.g. in the below we see twice insn-number-max, once with a prefix and once without prefix : last line, just before the value of instruction-history-size which is itself without prefix. (gdb) show record record btrace bts buffer-size: The record/replay bts buffer size is 65536. record btrace cpu: btrace cpu is 'auto'. record btrace pt buffer-size: The record/replay pt buffer size is 16384. record btrace replay-memory-access: Replay memory access is read-only. record full insn-number-max: Record/replay buffer limit is 200000. record full memory-query: Whether query if PREC cannot record memory change of next instruction is off. record full stop-at-limit: Whether record/replay stops when record/replay buffer becomes full is on. function-call-history-size: Number of functions to print in "record function-call-history" is 10. insn-number-max: instruction-history-size: Number of instructions to print in "record instruction-history" is 10. (gdb) Also, some values are output several times due to some aliases, so avoid outputting duplicated values by skipping all aliases. Now that the command structure has a correct 'back-pointer' from a command to its prefix command, we can simplify cmd_show_list by removing its prefix argument and at the same time fix the output inconsistencies and bugs. gdb/ChangeLog 2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> * cli/cli-setshow.h (cmd_show_list): Remove prefix argument. * cli/cli-decode.c (do_show_prefix_cmd): Likewise. * command.h (cmd_show_list): Likewise. * dwarf2/index-cache.c (show_index_cache_command): Likewise. * cli/cli-setshow.c (cmd_show_list): Use the prefix to produce the output. Skip aliases. gdb/testsuite/ChangeLog 2020-05-15 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/default.exp: Update output following fixes.
Diffstat (limited to 'gdb/cli')
-rw-r--r--gdb/cli/cli-decode.c2
-rw-r--r--gdb/cli/cli-setshow.c38
-rw-r--r--gdb/cli/cli-setshow.h3
3 files changed, 24 insertions, 19 deletions
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index be36eb6..c37dfaf 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -428,7 +428,7 @@ add_basic_prefix_cmd (const char *name, enum command_class theclass,
static void
do_show_prefix_cmd (const char *args, int from_tty, struct cmd_list_element *c)
{
- cmd_show_list (*c->prefixlist, from_tty, "");
+ cmd_show_list (*c->prefixlist, from_tty);
}
/* See command.h. */
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
index 2a2f905..19a5565 100644
--- a/gdb/cli/cli-setshow.c
+++ b/gdb/cli/cli-setshow.c
@@ -733,39 +733,45 @@ do_show_command (const char *arg, int from_tty, struct cmd_list_element *c)
/* Show all the settings in a list of show commands. */
void
-cmd_show_list (struct cmd_list_element *list, int from_tty, const char *prefix)
+cmd_show_list (struct cmd_list_element *list, int from_tty)
{
struct ui_out *uiout = current_uiout;
ui_out_emit_tuple tuple_emitter (uiout, "showlist");
for (; list != NULL; list = list->next)
{
+ /* We skip show command aliases to avoid showing duplicated values. */
+
/* If we find a prefix, run its list, prefixing our output by its
prefix (with "show " skipped). */
- if (list->prefixlist && !list->abbrev_flag)
+ if (list->prefixlist && list->cmd_pointer == nullptr)
{
ui_out_emit_tuple optionlist_emitter (uiout, "optionlist");
const char *new_prefix = strstr (list->prefixname, "show ") + 5;
if (uiout->is_mi_like_p ())
uiout->field_string ("prefix", new_prefix);
- cmd_show_list (*list->prefixlist, from_tty, new_prefix);
+ cmd_show_list (*list->prefixlist, from_tty);
}
- else
+ else if (list->theclass != no_set_class && list->cmd_pointer == nullptr)
{
- if (list->theclass != no_set_class)
- {
- ui_out_emit_tuple option_emitter (uiout, "option");
-
- uiout->text (prefix);
- uiout->field_string ("name", list->name);
- uiout->text (": ");
- if (list->type == show_cmd)
- do_show_command (NULL, from_tty, list);
- else
- cmd_func (list, NULL, from_tty);
- }
+ ui_out_emit_tuple option_emitter (uiout, "option");
+
+ {
+ /* If we find a prefix, output it (with "show " skipped). */
+ const char *prefixname
+ = (list->prefix == nullptr ? ""
+ : strstr (list->prefix->prefixname, "show ") + 5);
+ uiout->text (prefixname);
+ }
+ uiout->field_string ("name", list->name);
+ uiout->text (": ");
+ if (list->type == show_cmd)
+ do_show_command (NULL, from_tty, list);
+ else
+ cmd_func (list, NULL, from_tty);
}
}
}
+
diff --git a/gdb/cli/cli-setshow.h b/gdb/cli/cli-setshow.h
index 9f0492b..83e4984 100644
--- a/gdb/cli/cli-setshow.h
+++ b/gdb/cli/cli-setshow.h
@@ -60,7 +60,6 @@ extern void do_show_command (const char *arg, int from_tty,
/* Get a string version of C's current value. */
extern std::string get_setshow_command_value_string (const cmd_list_element *c);
-extern void cmd_show_list (struct cmd_list_element *list, int from_tty,
- const char *prefix);
+extern void cmd_show_list (struct cmd_list_element *list, int from_tty);
#endif /* CLI_CLI_SETSHOW_H */