gdb: Add new -n flag to some info commands

The 'info variables', its alias 'whereis', and 'info functions' all
include non-debug symbols in the output by default.  The list of
non-debug symbols can sometimes be quite long, resulting in the
debug symbol based results being scrolled off the screen.

This commit adds a '-n' flag to all of the commands listed above that
excludes the non-debug symbols from the results, leaving just the
debug symbol based results.

gdb/ChangeLog:

	* cli/cli-utils.c (info_print_options_defs): Delete.
	(make_info_print_options_def_group): Delete.
	(extract_info_print_options): Delete.
	(info_print_command_completer): Delete.
	(info_print_args_help): Add extra parameter, and optionally
	include text about -n flag.
	* cli/cli-utils.h (struct info_print_options): Delete.
	(extract_info_print_options): Delete declaration.
	(info_print_command_completer): Delete declaration.
	(info_print_args_help): Add extra parameter, extend header
	comment.
	* python/python.c (gdbpy_rbreak): Pass additional parameter to
	search_symbols.
	* stack.c (struct info_print_options): New type.
	(info_print_options_defs): New file scoped variable.
	(make_info_print_options_def_group): New static function.
	(info_print_command_completer): New static function.
	(info_locals_command): Update to use new local functions.
	(info_args_command): Likewise.
	(_initialize_stack): Add extra parameter to calls to
	info_print_args_help.
	* symtab.c (search_symbols): Add extra parameter, use this to
	possibly excluse non-debug symbols.
	(symtab_symbol_info): Add extra parameter, which is passed on to
	search_symbols.
	(struct info_print_options): New type.
	(info_print_options_defs): New file scoped variable.
	(make_info_print_options_def_group): New static function.
	(info_print_command_completer): New static function.
	(info_variables_command): Update to use local functions, and pass
	extra parameter through to symtab_symbol_info.
	(info_functions_command): Likewise.
	(info_types_command): Pass additional argument through to
	symtab_symbol_info.
	(rbreak_command): Pass extra argument to search_symbols.
	(_initialize_symtab): Add extra arguments for calls to
	info_print_args_help, and update help text for 'info variables',
	'whereis', and 'info functions' commands.
	* symtab.h (search_symbols): Add extra argument to declaration.
	* NEWS: Mention new flags.

gdb/doc/ChangeLog:

	* gdb.texinfo (Symbols): Add information about the -n flag to
	"info variables" and "info functions".

gdb/testsuite/ChangeLog:

	* gdb.base/info-fun.exp: Extend to test the -n flag for 'info
	functions'.  Reindent as needed.
	* gdb.base/info-var-f1.c: New file.
	* gdb.base/info-var-f2.c: New file.
	* gdb.base/info-var.exp: New file.
	* gdb.base/info-var.h: New file.
This commit is contained in:
Andrew Burgess
2019-07-22 16:53:06 +01:00
parent c4a23bf878
commit 4acfdd20c9
16 changed files with 446 additions and 164 deletions

View File

@ -194,7 +194,8 @@ report_unrecognized_option_error (const char *command, const char *args)
const char *
info_print_args_help (const char *prefix,
const char *entity_kind)
const char *entity_kind,
bool document_n_flag)
{
return xstrprintf (_("\
%sIf NAMEREGEXP is provided, only prints the %s whose name\n\
@ -204,8 +205,11 @@ matches TYPEREGEXP. Note that the matching is done with the type\n\
printed by the 'whatis' command.\n\
By default, the command might produce headers and/or messages indicating\n\
why no %s can be printed.\n\
The flag -q disables the production of these headers and messages."),
prefix, entity_kind, entity_kind, entity_kind);
The flag -q disables the production of these headers and messages.%s"),
prefix, entity_kind, entity_kind, entity_kind,
(document_n_flag ? _("\n\
By default, the command will include non-debug symbols in the output;\n\
these can be excluded using the -n flag.") : ""));
}
/* See documentation in cli-utils.h. */
@ -435,58 +439,3 @@ validate_flags_qcs (const char *which_command, qcs_flags *flags)
error (_("%s: -c and -s are mutually exclusive"), which_command);
}
/* The options used by the 'info variables' commands and similar. */
static const gdb::option::option_def info_print_options_defs[] = {
gdb::option::boolean_option_def<info_print_options> {
"q",
[] (info_print_options *opt) { return &opt->quiet; },
nullptr, /* show_cmd_cb */
nullptr /* set_doc */
},
gdb::option::string_option_def<info_print_options> {
"t",
[] (info_print_options *opt) { return &opt->type_regexp; },
nullptr, /* show_cmd_cb */
nullptr /* set_doc */
}
};
/* Returns the option group used by 'info variables' and similar. */
static gdb::option::option_def_group
make_info_print_options_def_group (info_print_options *opts)
{
return {{info_print_options_defs}, opts};
}
/* See documentation in cli-utils.h. */
void
extract_info_print_options (info_print_options *opts,
const char **args)
{
auto grp = make_info_print_options_def_group (opts);
gdb::option::process_options
(args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
if (*args != nullptr && **args == '\0')
*args = nullptr;
}
/* See documentation in cli-utils.h. */
void
info_print_command_completer (struct cmd_list_element *ignore,
completion_tracker &tracker,
const char *text, const char * /* word */)
{
const auto group
= make_info_print_options_def_group (nullptr);
if (gdb::option::complete_options
(tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
return;
const char *word = advance_to_expression_complete_word_point (tracker, text);
symbol_completer (ignore, tracker, text, word);
}