frame apply [all |
count |
-count | level
level...] [
flag]...
commandframe apply
command allows you to apply the named
command to one or more frames.
all
all
to apply command to all frames.
level
level
to apply command to the set of frames identified
by the level list. level is a frame level or a range of frame
levels as level1-level2. The frame level is the number shown
in the first field of the ‘backtrace’ command output.
E.g., ‘2-4 6-8 3’ indicates to apply command for the frames
at levels 2, 3, 4, 6, 7, 8, and then again on frame at level 3.
Note that the frames on which frame apply
applies a command are
also influenced by the set backtrace
settings such as set
backtrace past-main
and set backtrace limit N
. See
See Backtraces.
The flag arguments control what output to produce and how to handle
errors raised when applying command to a frame. flag
must start with a -
directly followed by one letter in
qcs
. If several flags are provided, they must be given
individually, such as -c -q
.
By default, gdb displays some frame information before the
output produced by command, and an error raised during the
execution of a command will abort frame apply
. The
following flags can be used to fine-tune this behavior:
-c
-c
, which stands for ‘continue’, causes any
errors in command to be displayed, and the execution of
frame apply
then continues.
-s
-s
, which stands for ‘silent’, causes any errors
or empty output produced by a command to be silently ignored.
That is, the execution continues, but the frame information and errors
are not printed.
-q
-q
(‘quiet’) disables printing the frame
information.
The following example shows how the flags -c
and -s
are
working when applying the command p j
to all frames, where
variable j
can only be successfully printed in the outermost
#1 main
frame.
(gdb) frame apply all p j #0 some_function (i=5) at fun.c:4 No symbol "j" in current context. (gdb) frame apply all -c p j #0 some_function (i=5) at fun.c:4 No symbol "j" in current context. #1 0x565555fb in main (argc=1, argv=0xffffd2c4) at fun.c:11 $1 = 5 (gdb) frame apply all -s p j #1 0x565555fb in main (argc=1, argv=0xffffd2c4) at fun.c:11 $2 = 5 (gdb)
By default, ‘frame apply’, prints the frame location information before the command output:
(gdb) frame apply all p $sp #0 some_function (i=5) at fun.c:4 $4 = (void *) 0xffffd1e0 #1 0x565555fb in main (argc=1, argv=0xffffd2c4) at fun.c:11 $5 = (void *) 0xffffd1f0 (gdb)
If flag -q
is given, no frame information is printed:
(gdb) frame apply all -q p $sp $12 = (void *) 0xffffd1e0 $13 = (void *) 0xffffd1f0 (gdb)
faas
commandframe apply all -s
command.
Applies command on all frames, ignoring errors and empty output.
It can for example be used to print a local variable or a function argument without knowing the frame where this variable or argument is, using:
(gdb) faas p some_local_var_i_do_not_remember_where_it_is
Note that the command tfaas
command applies command
on all frames of all threads. See See Threads.