Most commands for examining the stack and other data in your program work on
whichever stack frame is selected at the moment. Here are the commands for
selecting a stack frame; all of them finish by printing a brief description
of the stack frame just selected.
-
frame
n or
f
n
-
Select frame number n. Recall that frame 0 is the innermost
(currently executing) frame, frame 1 is the frame that called the
innermost one, and so on. The highest-numbered frame is the one for
main.
-
frame
addr or
f
addr
- Select the frame at address addr. This is useful mainly if the
chaining of stack frames has been damaged by a bug, making it
impossible for GDB to assign numbers properly to all frames. In
addition, this can be useful when your program has multiple stacks and
switches between them.
On the MIPS
architecture, frame needs
two addresses: a stack
pointer and a program counter.
-
up
n
-
Move n frames up the stack. For positive numbers, this
advances toward the outermost frame, to higher frame numbers, to frames
that have existed longer. The default for n is 1.
-
down
n
-
Move n frames down the stack. For positive numbers, this
advances toward the innermost frame, to lower frame numbers, to frames
that were created more recently. The default for n is 1. You may
abbreviate down as do.
All of these commands end by printing two lines of output describing the
frame. The first line shows the frame number, the function name, the
arguments, and the source file and line number of execution in that
frame. The second line shows the text of that source line.
For example:
(gdb) up
#1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
at env.c:10
10 read_input_file (argv[i]);
After such a printout, the list command with no arguments
prints ten lines centered on the point of execution in the frame.
See "Printing source lines."
-
up-silently
n or
down-silently
n
-
These two commands are variants of up and down;
they differ in that they do their work silently, without
causing display of the new frame. They're intended primarily for use
in GDB command scripts, where the output might be unnecessary and
distracting.