Examining the Stack
Motorola
GNU Debugger (GDB)
For More Information On This Product,
Go to: www.freescale.com
D-27
D.7 Examining the Stack
When your program has stopped, the first thing you need to know is where it stopped and
how it got there.
Each time your program performs a function call, the information about where in the
program the call was made from is saved in a block of data called a
stack frame
. The frame
also contains the arguments of the call and the local variables of the function that was
called. All the stack frames are allocated in a region of memory called the
call stack
.
When your program stops, the GDB commands for examining the stack allow you to see
all of this information.
One of the stack frames is
selected
by GDB and many GDB commands refer implicitly to
the selected frame. In particular, whenever you ask GDB for the value of a variable in the
program, the value is found in the selected frame. There are special GDB commands to
select whichever frame you are interested in.
When the program stops, GDB automatically selects the currently executing frame and
describes it briefly as the ‘frame’ command does (see section Frame Info, Info).
D.7.1 Stack Frames
The call stack is divided up into contiguous pieces called
stack frames
, or
frames
for short;
each frame is the data associated with one call to one function. The frame contains the
arguments given to the function, the function’s local variables, and the address at which
the function is executing.
When your program is started, the stack has only one frame, that of the function main.
This is called the
initial
frame or the
outermost
frame. Each time a function is called, a
new frame is made. Each time a function returns, the frame for that function invocation is
eliminated. If a function is recursive, there can be many frames for the same function. The
frame for the function in which execution is actually occurring is called the
innermost
frame. This is the most recently created of all the stack frames that still exist.
Inside your program, stack frames are identified by their addresses. A stack frame consists
of many bytes, each of which has its own address; each kind of computer has a convention
for choosing one of those bytes whose address serves as the address of the frame. Usually
this address is kept in a register called the
frame pointer register
while execution is going
on in that frame.
GDB assigns numbers to all existing stack frames, starting with zero for the innermost
frame, one for the frame that called it, and so on upward. These numbers do not really
F
Freescale Semiconductor, Inc.
n
.