Frame Apply (Debugging with GDB)

### 8.5 Applying a Command to Several Frames. ¶

`frame apply [all | count | -count | level level…] [option]… command`

  The `frame apply` command allows you to apply the named command to one or more frames.

  ``all``

    Specify `all` to apply command to all frames.

  `count`

    Use count to apply command to the innermost count frames, where count is a positive number.

  `-count`

    Use -count to apply command to the outermost count frames, where count is a positive number.

  ``level``

    Use `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 Backtraces.

  The `frame apply` command also supports a number of options that allow overriding relevant `set backtrace` settings:

  `-past-main [`on`|`off`]`

    Whether backtraces should continue past `main`. Related setting: set backtrace past-main.

  `-past-entry [`on`|`off`]`

    Whether backtraces should continue past the entry point of a program. Related setting: set backtrace past-entry.

  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 options can be used to fine-tune these behaviors:

  `-c`

    The flag `-c`, which stands for ‘`continue`’, causes any errors in command to be displayed, and the execution of `frame apply` then continues.

  `-s`

    The flag `-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`

    The flag `-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 the flag `-q` is given, no frame information is printed:

      (gdb) frame apply all -q p $sp
      $12 = (void *) 0xffffd1e0
      $13 = (void *) 0xffffd1f0
      (gdb)

`faas command` ¶

  Shortcut for `frame 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

  The `faas` command accepts the same options as the `frame apply` command. See frame apply.

  Note that the command `tfaas command` applies command on all frames of all threads. See See Threads.