diff options
author | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2020-05-10 08:36:29 +0200 |
---|---|---|
committer | Philippe Waroquiers <philippe.waroquiers@skynet.be> | 2020-05-15 22:17:45 +0200 |
commit | 7aa1b46f4321eb2c2054c4d8985f2d8e3c18aa36 (patch) | |
tree | 6113a21731ac4c5b287f5c5fe32d30b57458eba7 /gdb/cli | |
parent | 89bcba74f89baceba3fa7387622e3d60e1de02e8 (diff) | |
download | gdb-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.c | 2 | ||||
-rw-r--r-- | gdb/cli/cli-setshow.c | 38 | ||||
-rw-r--r-- | gdb/cli/cli-setshow.h | 3 |
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 */ |