mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 15:23:53 +08:00
5d7071341d
This adds support for '-'-style options to the "frame apply" family of commands -- "frame apply COUNT", "frame apply level", "frame apply all", "faas" and "tfaas". The -q/-c/-s flags were already supported, -past-main/-past-entry is new: ~~~ (gdb) help frame apply all Apply a command to all frames. Usage: frame apply all [OPTION]... COMMAND Prints the frame location information followed by COMMAND output. By default, an error raised during the execution of COMMAND aborts "frame apply". Options: -q Disables printing the frame location information. -c Print any error raised by COMMAND and continue. -s Silently ignore any errors or empty output produced by COMMAND. -past-main [on|off] Set whether backtraces should continue past "main". Normally the caller of "main" is not of interest, so GDB will terminate the backtrace at "main". Set this if you need to see the rest of the stack trace. -past-entry [on|off] Set whether backtraces should continue past the entry point of a program. Normally there are no callers beyond the entry point of a program, so GDB will terminate the backtrace there. Set this if you need to see the rest of the stack trace. ~~~ TAB completion of options is now supported. Also, TAB completion of COMMAND in "frame apply all COMMAND" does the right thing now, making use of complete_command, added by the previous patch. E.g.: (gdb) thread apply all -ascending frame apply all -past-main print -[TAB] -address -elements -pretty -symbol -array -null-stop -repeats -union -array-indexes -object -static-members -vtbl (gdb) thread apply all -ascending frame apply all -past-main print glo[TAB] global1 global2 The change to tfaas_command is necessary because otherwise you get this: (gdb) tfaas -- Unrecognized option at: frame apply all -s -- That's because the above is equivalent to: (gdb) thread apply all -s frame apply all -s -- and the "--" instructs "thread apply" to consider everything up to "--" as its command options. And from that view, "frame" is an invalid option. The change makes tfaas be equivalent to: (gdb) thread apply all -s -- frame apply all -s -- gdb/ChangeLog: 2019-06-13 Pedro Alves <palves@redhat.com> * cli/cli-utils.c (parse_flags_qcs): Use validate_flags_qcs. (validate_flags_qcs): New. * cli/cli-utils.h (struct qcs_flags): Change field types to int. (validate_flags_qcs): Declare. * stack.c (qcs_flag_option_def, fr_qcs_flags_option_defs): New. (make_frame_apply_options_def_group): New. (frame_apply_command_count): Process options with gdb::option::process_options. (frame_apply_completer): New. (frame_apply_level_completer, frame_apply_all_completer) (frame_apply_completer): New. (_initialize_stack): Update help of "frame apply", "frame apply level", "frame apply all" and "faas" to mention supported options and install command completers. * stack.h (frame_apply_all_completer): Declare. * thread.c: Include "stack.h". (tfaas_command): Add "--". (_initialize_thread): Update help "tfaas" to mention supported options and install command completer. gdb/testsuite/ChangeLog: 2019-06-13 Pedro Alves <palves@redhat.com> * gdb.base/options.exp (test-frame-apply): New. (top level): Test print commands with different "frame apply" prefixes.
61 lines
2.3 KiB
C
61 lines
2.3 KiB
C
/* Stack manipulation commands, for GDB the GNU Debugger.
|
|
|
|
Copyright (C) 2003-2019 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef STACK_H
|
|
#define STACK_H
|
|
|
|
/* Access method used by the MI -stack-select-frame command to switch to
|
|
frame FI. This differs from SELECT_FRAME in that the observers for a
|
|
user selected context change will be triggered. */
|
|
|
|
void select_frame_for_mi (struct frame_info *fi);
|
|
|
|
gdb::unique_xmalloc_ptr<char> find_frame_funname (struct frame_info *frame,
|
|
enum language *funlang,
|
|
struct symbol **funcp);
|
|
|
|
typedef void (*iterate_over_block_arg_local_vars_cb) (const char *print_name,
|
|
struct symbol *sym,
|
|
void *cb_data);
|
|
|
|
void iterate_over_block_arg_vars (const struct block *block,
|
|
iterate_over_block_arg_local_vars_cb cb,
|
|
void *cb_data);
|
|
|
|
void iterate_over_block_local_vars (const struct block *block,
|
|
iterate_over_block_arg_local_vars_cb cb,
|
|
void *cb_data);
|
|
|
|
/* Get or set the last displayed symtab and line, which is, e.g. where we set a
|
|
* breakpoint when `break' is supplied with no arguments. */
|
|
void clear_last_displayed_sal (void);
|
|
int last_displayed_sal_is_valid (void);
|
|
struct program_space* get_last_displayed_pspace (void);
|
|
CORE_ADDR get_last_displayed_addr (void);
|
|
struct symtab* get_last_displayed_symtab (void);
|
|
int get_last_displayed_line (void);
|
|
symtab_and_line get_last_displayed_sal ();
|
|
|
|
/* Completer for the "frame apply all" command. */
|
|
void frame_apply_all_cmd_completer (struct cmd_list_element *ignore,
|
|
completion_tracker &tracker,
|
|
const char *text, const char */*word*/);
|
|
|
|
#endif /* #ifndef STACK_H */
|