610 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			610 lines
		
	
	
	
		
			25 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								<HTML>
							 | 
						||
| 
								 | 
							
								<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
							 | 
						||
| 
								 | 
							
								<!-- Created on March, 27  2008 by texi2html 1.64 -->
							 | 
						||
| 
								 | 
							
								<!-- 
							 | 
						||
| 
								 | 
							
								Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
							 | 
						||
| 
								 | 
							
								            Karl Berry  <karl@freefriends.org>
							 | 
						||
| 
								 | 
							
								            Olaf Bachmann <obachman@mathematik.uni-kl.de>
							 | 
						||
| 
								 | 
							
								            and many others.
							 | 
						||
| 
								 | 
							
								Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
							 | 
						||
| 
								 | 
							
								Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								-->
							 | 
						||
| 
								 | 
							
								<HEAD>
							 | 
						||
| 
								 | 
							
								<TITLE>Debugging with GDB: Stack</TITLE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<META NAME="description" CONTENT="Debugging with GDB: Stack">
							 | 
						||
| 
								 | 
							
								<META NAME="keywords" CONTENT="Debugging with GDB: Stack">
							 | 
						||
| 
								 | 
							
								<META NAME="resource-type" CONTENT="document">
							 | 
						||
| 
								 | 
							
								<META NAME="distribution" CONTENT="global">
							 | 
						||
| 
								 | 
							
								<META NAME="Generator" CONTENT="texi2html 1.64">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</HEAD>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="SEC46"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_6.html#SEC45"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC47"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> >> </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
							 | 
						||
| 
								 | 
							
								</TR></TABLE>
							 | 
						||
| 
								 | 
							
								<H1> 6. Examining the Stack </H1>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC46::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When your program has stopped, the first thing you need to know is where it
							 | 
						||
| 
								 | 
							
								stopped and how it got there.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX283"></A>
							 | 
						||
| 
								 | 
							
								Each time your program performs a function call, information about the call
							 | 
						||
| 
								 | 
							
								is generated.
							 | 
						||
| 
								 | 
							
								That information includes the location of the call in your program,
							 | 
						||
| 
								 | 
							
								the arguments of the call,
							 | 
						||
| 
								 | 
							
								and the local variables of the function being called.
							 | 
						||
| 
								 | 
							
								The information is saved in a block of data called a <EM>stack frame</EM>.
							 | 
						||
| 
								 | 
							
								The stack frames are allocated in a region of memory called the <EM>call
							 | 
						||
| 
								 | 
							
								stack</EM>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When your program stops, the GDB commands for examining the
							 | 
						||
| 
								 | 
							
								stack allow you to see all of this information.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX284"></A>
							 | 
						||
| 
								 | 
							
								One of the stack frames is <EM>selected</EM> 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
							 | 
						||
| 
								 | 
							
								your program, the value is found in the selected frame.  There are
							 | 
						||
| 
								 | 
							
								special GDB commands to select whichever frame you are
							 | 
						||
| 
								 | 
							
								interested in.  See section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When your program stops, GDB automatically selects the
							 | 
						||
| 
								 | 
							
								currently executing frame and describes it briefly, similar to the
							 | 
						||
| 
								 | 
							
								<CODE>frame</CODE> command (see section <A HREF="gdb_7.html#SEC50">Information about a Frame</A>).
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_7.html#SEC47">6.1 Stack Frames</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Stack frames</TD></TR>
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_7.html#SEC48">6.2 Backtraces</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_7.html#SEC49">6.3 Selecting a Frame</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Selecting a frame</TD></TR>
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_7.html#SEC50">6.4 Information About a Frame</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Information on a frame</TD></TR>
							 | 
						||
| 
								 | 
							
								</TABLE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<br>
							 | 
						||
| 
								 | 
							
								</BLOCKQUOTE>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Frames"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC47"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC48"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> >> </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
							 | 
						||
| 
								 | 
							
								</TR></TABLE>
							 | 
						||
| 
								 | 
							
								<H2> 6.1 Stack Frames </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC47::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX285"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX286"></A>
							 | 
						||
| 
								 | 
							
								The call stack is divided up into contiguous pieces called <EM>stack
							 | 
						||
| 
								 | 
							
								frames</EM>, or <EM>frames</EM> 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.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX287"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX288"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX289"></A>
							 | 
						||
| 
								 | 
							
								When your program is started, the stack has only one frame, that of the
							 | 
						||
| 
								 | 
							
								function <CODE>main</CODE>.  This is called the <EM>initial</EM> frame or the
							 | 
						||
| 
								 | 
							
								<EM>outermost</EM> 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 <EM>innermost</EM> frame.  This is the most
							 | 
						||
| 
								 | 
							
								recently created of all the stack frames that still exist.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX290"></A>
							 | 
						||
| 
								 | 
							
								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 byte whose
							 | 
						||
| 
								 | 
							
								address serves as the address of the frame.  Usually this address is kept
							 | 
						||
| 
								 | 
							
								in a register called the <EM>frame pointer register</EM>
							 | 
						||
| 
								 | 
							
								(see section <A HREF="gdb_9.html#SEC69">$fp</A>) while execution is going on in that frame.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX291"></A>
							 | 
						||
| 
								 | 
							
								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 exist in your program;
							 | 
						||
| 
								 | 
							
								they are assigned by GDB to give you a way of designating stack
							 | 
						||
| 
								 | 
							
								frames in GDB commands.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX292"></A>
							 | 
						||
| 
								 | 
							
								Some compilers provide a way to compile functions so that they operate
							 | 
						||
| 
								 | 
							
								without stack frames.  (For example, the GCC option
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><SAMP>`-fomit-frame-pointer'</SAMP>
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table>generates functions without a frame.)
							 | 
						||
| 
								 | 
							
								This is occasionally done with heavily used library functions to save
							 | 
						||
| 
								 | 
							
								the frame setup time.  GDB has limited facilities for dealing
							 | 
						||
| 
								 | 
							
								with these function invocations.  If the innermost function invocation
							 | 
						||
| 
								 | 
							
								has no stack frame, GDB nevertheless regards it as though
							 | 
						||
| 
								 | 
							
								it had a separate frame, which is numbered zero as usual, allowing
							 | 
						||
| 
								 | 
							
								correct tracing of the function call chain.  However, GDB has
							 | 
						||
| 
								 | 
							
								no provision for frameless functions elsewhere in the stack.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX293"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX294"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>frame <VAR>args</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>The <CODE>frame</CODE> command allows you to move from one stack frame to another,
							 | 
						||
| 
								 | 
							
								and to print the stack frame you select.  <VAR>args</VAR> may be either the
							 | 
						||
| 
								 | 
							
								address of the frame or the stack frame number.  Without an argument,
							 | 
						||
| 
								 | 
							
								<CODE>frame</CODE> prints the current stack frame.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX295"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX296"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>select-frame</CODE>
							 | 
						||
| 
								 | 
							
								<DD>The <CODE>select-frame</CODE> command allows you to move from one stack frame
							 | 
						||
| 
								 | 
							
								to another without printing the frame.  This is the silent version of
							 | 
						||
| 
								 | 
							
								<CODE>frame</CODE>.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Backtrace"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC48"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC47"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC49"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC49"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> >> </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
							 | 
						||
| 
								 | 
							
								</TR></TABLE>
							 | 
						||
| 
								 | 
							
								<H2> 6.2 Backtraces </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC48::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX297"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX298"></A>
							 | 
						||
| 
								 | 
							
								A backtrace is a summary of how your program got where it is.  It shows one
							 | 
						||
| 
								 | 
							
								line per frame, for many frames, starting with the currently executing
							 | 
						||
| 
								 | 
							
								frame (frame zero), followed by its caller (frame one), and on up the
							 | 
						||
| 
								 | 
							
								stack.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX299"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX300"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>backtrace</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>bt</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print a backtrace of the entire stack: one line per frame for all
							 | 
						||
| 
								 | 
							
								frames in the stack.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can stop the backtrace at any time by typing the system interrupt
							 | 
						||
| 
								 | 
							
								character, normally <KBD>Ctrl-c</KBD>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>backtrace <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>bt <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Similar, but print only the innermost <VAR>n</VAR> frames.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>backtrace -<VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>bt -<VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Similar, but print only the outermost <VAR>n</VAR> frames.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>backtrace full</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>bt full</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>bt full <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>bt full -<VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print the values of the local variables also.  <VAR>n</VAR> specifies the
							 | 
						||
| 
								 | 
							
								number of frames to print, as described above.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX301"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX302"></A>
							 | 
						||
| 
								 | 
							
								The names <CODE>where</CODE> and <CODE>info stack</CODE> (abbreviated <CODE>info s</CODE>)
							 | 
						||
| 
								 | 
							
								are additional aliases for <CODE>backtrace</CODE>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX303"></A>
							 | 
						||
| 
								 | 
							
								In a multi-threaded program, GDB by default shows the
							 | 
						||
| 
								 | 
							
								backtrace only for the current thread.  To display the backtrace for
							 | 
						||
| 
								 | 
							
								several or all of the threads, use the command <CODE>thread apply</CODE>
							 | 
						||
| 
								 | 
							
								(see section <A HREF="gdb_5.html#SEC27">thread apply</A>).  For example, if you type <KBD>thread
							 | 
						||
| 
								 | 
							
								apply all backtrace</KBD>, GDB will display the backtrace for all
							 | 
						||
| 
								 | 
							
								the threads; this is handy when you debug a core dump of a
							 | 
						||
| 
								 | 
							
								multi-threaded program.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Each line in the backtrace shows the frame number and the function name.
							 | 
						||
| 
								 | 
							
								The program counter value is also shown--unless you use <CODE>set
							 | 
						||
| 
								 | 
							
								print address off</CODE>.  The backtrace also shows the source file name and
							 | 
						||
| 
								 | 
							
								line number, as well as the arguments to the function.  The program
							 | 
						||
| 
								 | 
							
								counter value is omitted if it is at the beginning of the code for that
							 | 
						||
| 
								 | 
							
								line number.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Here is an example of a backtrace.  It was made with the command
							 | 
						||
| 
								 | 
							
								<SAMP>`bt 3'</SAMP>, so it shows the innermost three frames.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
							 | 
						||
| 
								 | 
							
								    at builtin.c:993
							 | 
						||
| 
								 | 
							
								#1  0x6e38 in expand_macro (sym=0x2b600) at macro.c:242
							 | 
						||
| 
								 | 
							
								#2  0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
							 | 
						||
| 
								 | 
							
								    at macro.c:71
							 | 
						||
| 
								 | 
							
								(More stack frames follow...)
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The display for frame zero does not begin with a program counter
							 | 
						||
| 
								 | 
							
								value, indicating that your program has stopped at the beginning of the
							 | 
						||
| 
								 | 
							
								code for line <CODE>993</CODE> of <CODE>builtin.c</CODE>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX304"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX305"></A>
							 | 
						||
| 
								 | 
							
								If your program was compiled with optimizations, some compilers will
							 | 
						||
| 
								 | 
							
								optimize away arguments passed to functions if those arguments are
							 | 
						||
| 
								 | 
							
								never used after the call.  Such optimizations generate code that
							 | 
						||
| 
								 | 
							
								passes arguments through registers, but doesn't store those arguments
							 | 
						||
| 
								 | 
							
								in the stack frame.  GDB has no way of displaying such
							 | 
						||
| 
								 | 
							
								arguments in stack frames other than the innermost one.  Here's what
							 | 
						||
| 
								 | 
							
								such a backtrace might look like:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#0  m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
							 | 
						||
| 
								 | 
							
								    at builtin.c:993
							 | 
						||
| 
								 | 
							
								#1  0x6e38 in expand_macro (sym=<value optimized out>) at macro.c:242
							 | 
						||
| 
								 | 
							
								#2  0x6840 in expand_token (obs=0x0, t=<value optimized out>, td=0xf7fffb08)
							 | 
						||
| 
								 | 
							
								    at macro.c:71
							 | 
						||
| 
								 | 
							
								(More stack frames follow...)
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The values of arguments that were not saved in their stack frames are
							 | 
						||
| 
								 | 
							
								shown as <SAMP>`<value optimized out>'</SAMP>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you need to display the values of such optimized-out arguments,
							 | 
						||
| 
								 | 
							
								either deduce that from other variables whose values depend on the one
							 | 
						||
| 
								 | 
							
								you are interested in, or recompile without optimizations.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX306"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX307"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX308"></A>
							 | 
						||
| 
								 | 
							
								Most programs have a standard user entry point--a place where system
							 | 
						||
| 
								 | 
							
								libraries and startup code transition into user code.  For C this is
							 | 
						||
| 
								 | 
							
								<CODE>main</CODE><A NAME="DOCF3" HREF="gdb_fot.html#FOOT3">(3)</A>.
							 | 
						||
| 
								 | 
							
								When GDB finds the entry function in a backtrace
							 | 
						||
| 
								 | 
							
								it will terminate the backtrace, to avoid tracing into highly
							 | 
						||
| 
								 | 
							
								system-specific (and generally uninteresting) code.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you need to examine the startup code, or limit the number of levels
							 | 
						||
| 
								 | 
							
								in a backtrace, you can change this behavior:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<DT><CODE>set backtrace past-main</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>set backtrace past-main on</CODE>
							 | 
						||
| 
								 | 
							
								<DD><A NAME="IDX309"></A>
							 | 
						||
| 
								 | 
							
								Backtraces will continue past the user entry point.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>set backtrace past-main off</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Backtraces will stop when they encounter the user entry point.  This is the
							 | 
						||
| 
								 | 
							
								default.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>show backtrace past-main</CODE>
							 | 
						||
| 
								 | 
							
								<DD><A NAME="IDX310"></A>
							 | 
						||
| 
								 | 
							
								Display the current user entry point backtrace policy.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>set backtrace past-entry</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>set backtrace past-entry on</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Backtraces will continue past the internal entry point of an application.
							 | 
						||
| 
								 | 
							
								This entry point is encoded by the linker when the application is built,
							 | 
						||
| 
								 | 
							
								and is likely before the user entry point <CODE>main</CODE> (or equivalent) is called.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>set backtrace past-entry off</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Backtraces will stop when they encounter the internal entry point of an
							 | 
						||
| 
								 | 
							
								application.  This is the default.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>show backtrace past-entry</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Display the current internal entry point backtrace policy.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>set backtrace limit <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>set backtrace limit 0</CODE>
							 | 
						||
| 
								 | 
							
								<DD><A NAME="IDX311"></A>
							 | 
						||
| 
								 | 
							
								Limit the backtrace to <VAR>n</VAR> levels.  A value of zero means
							 | 
						||
| 
								 | 
							
								unlimited.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>show backtrace limit</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Display the current limit on backtrace levels.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Selection"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC49"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC48"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC50"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC50"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> >> </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
							 | 
						||
| 
								 | 
							
								</TR></TABLE>
							 | 
						||
| 
								 | 
							
								<H2> 6.3 Selecting a Frame </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC49::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX312"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX313"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>frame <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>f <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Select frame number <VAR>n</VAR>.  Recall that frame zero is the innermost
							 | 
						||
| 
								 | 
							
								(currently executing) frame, frame one is the frame that called the
							 | 
						||
| 
								 | 
							
								innermost one, and so on.  The highest-numbered frame is the one for
							 | 
						||
| 
								 | 
							
								<CODE>main</CODE>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>frame <VAR>addr</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>f <VAR>addr</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Select the frame at address <VAR>addr</VAR>.  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.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On the SPARC architecture, <CODE>frame</CODE> needs two addresses to
							 | 
						||
| 
								 | 
							
								select an arbitrary frame: a frame pointer and a stack pointer.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On the MIPS and Alpha architecture, it needs two addresses: a stack
							 | 
						||
| 
								 | 
							
								pointer and a program counter.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On the 29k architecture, it needs three addresses: a register stack
							 | 
						||
| 
								 | 
							
								pointer, a program counter, and a memory stack pointer.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX314"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>up <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Move <VAR>n</VAR> frames up the stack.  For positive numbers <VAR>n</VAR>, this
							 | 
						||
| 
								 | 
							
								advances toward the outermost frame, to higher frame numbers, to frames
							 | 
						||
| 
								 | 
							
								that have existed longer.  <VAR>n</VAR> defaults to one.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX315"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX316"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>down <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Move <VAR>n</VAR> frames down the stack.  For positive numbers <VAR>n</VAR>, this
							 | 
						||
| 
								 | 
							
								advances toward the innermost frame, to lower frame numbers, to frames
							 | 
						||
| 
								 | 
							
								that were created more recently.  <VAR>n</VAR> defaults to one.  You may
							 | 
						||
| 
								 | 
							
								abbreviate <CODE>down</CODE> as <CODE>do</CODE>.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) up
							 | 
						||
| 
								 | 
							
								#1  0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
							 | 
						||
| 
								 | 
							
								    at env.c:10
							 | 
						||
| 
								 | 
							
								10              read_input_file (argv[i]);
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								After such a printout, the <CODE>list</CODE> command with no arguments
							 | 
						||
| 
								 | 
							
								prints ten lines centered on the point of execution in the frame.
							 | 
						||
| 
								 | 
							
								You can also edit the program at the point of execution with your favorite
							 | 
						||
| 
								 | 
							
								editing program by typing <CODE>edit</CODE>.
							 | 
						||
| 
								 | 
							
								See section <A HREF="gdb_8.html#SEC52">Printing Source Lines</A>,
							 | 
						||
| 
								 | 
							
								for details.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX317"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX318"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>up-silently <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>down-silently <VAR>n</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>These two commands are variants of <CODE>up</CODE> and <CODE>down</CODE>,
							 | 
						||
| 
								 | 
							
								respectively; they differ in that they do their work silently, without
							 | 
						||
| 
								 | 
							
								causing display of the new frame.  They are intended primarily for use
							 | 
						||
| 
								 | 
							
								in GDB command scripts, where the output might be unnecessary and
							 | 
						||
| 
								 | 
							
								distracting.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Frame Info"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC50"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC49"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> >> </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
							 | 
						||
| 
								 | 
							
								</TR></TABLE>
							 | 
						||
| 
								 | 
							
								<H2> 6.4 Information About a Frame </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC50::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								There are several other commands to print information about the selected
							 | 
						||
| 
								 | 
							
								stack frame.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<DT><CODE>frame</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>f</CODE>
							 | 
						||
| 
								 | 
							
								<DD>When used without any argument, this command does not change which
							 | 
						||
| 
								 | 
							
								frame is selected, but prints a brief description of the currently
							 | 
						||
| 
								 | 
							
								selected stack frame.  It can be abbreviated <CODE>f</CODE>.  With an
							 | 
						||
| 
								 | 
							
								argument, this command is used to select a stack frame.
							 | 
						||
| 
								 | 
							
								See section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX319"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX320"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>info frame</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>info f</CODE>
							 | 
						||
| 
								 | 
							
								<DD>This command prints a verbose description of the selected stack frame,
							 | 
						||
| 
								 | 
							
								including:
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<UL>
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the address of the frame
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the address of the next frame down (called by this frame)
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the address of the next frame up (caller of this frame)
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the language in which the source code corresponding to this frame is written
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the address of the frame's arguments
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the address of the frame's local variables
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								the program counter saved in it (the address of execution in the caller frame)
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								which registers were saved in the frame
							 | 
						||
| 
								 | 
							
								</UL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The verbose description is useful when
							 | 
						||
| 
								 | 
							
								something has gone wrong that has made the stack format fail to fit
							 | 
						||
| 
								 | 
							
								the usual conventions.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>info frame <VAR>addr</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>info f <VAR>addr</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print a verbose description of the frame at address <VAR>addr</VAR>, without
							 | 
						||
| 
								 | 
							
								selecting that frame.  The selected frame remains unchanged by this
							 | 
						||
| 
								 | 
							
								command.  This requires the same kind of address (more than one for some
							 | 
						||
| 
								 | 
							
								architectures) that you specify in the <CODE>frame</CODE> command.
							 | 
						||
| 
								 | 
							
								See section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX321"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>info args</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print the arguments of the selected frame, each on a separate line.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>info locals</CODE>
							 | 
						||
| 
								 | 
							
								<DD><A NAME="IDX322"></A>
							 | 
						||
| 
								 | 
							
								Print the local variables of the selected frame, each on a separate
							 | 
						||
| 
								 | 
							
								line.  These are all variables (declared either static or automatic)
							 | 
						||
| 
								 | 
							
								accessible at the point of execution of the selected frame.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX323"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX324"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX325"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>info catch</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print a list of all the exception handlers that are active in the
							 | 
						||
| 
								 | 
							
								current stack frame at the current point of execution.  To see other
							 | 
						||
| 
								 | 
							
								exception handlers, visit the associated frame (using the <CODE>up</CODE>,
							 | 
						||
| 
								 | 
							
								<CODE>down</CODE>, or <CODE>frame</CODE> commands); then type <CODE>info catch</CODE>.
							 | 
						||
| 
								 | 
							
								See section <A HREF="gdb_6.html#SEC35">Setting Catchpoints</A>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Source"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC46"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> >> </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
							 | 
						||
| 
								 | 
							
								</TR></TABLE>
							 | 
						||
| 
								 | 
							
								<BR>  
							 | 
						||
| 
								 | 
							
								<FONT SIZE="-1">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<address>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<p>Please send FSF & GNU inquiries & questions to <a
							 | 
						||
| 
								 | 
							
								href="mailto:gnu@gnu.org">gnu@gnu.org</a>.  There are also <a
							 | 
						||
| 
								 | 
							
								href="http://www.gnu.org/home.html#ContactInfo">other ways to
							 | 
						||
| 
								 | 
							
								contact</a> the FSF.</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<p>These pages are maintained by <a
							 | 
						||
| 
								 | 
							
								href="http://www.gnu.org/software/gdb/">the GDB developers</a>.</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<p>Copyright Free Software Foundation, Inc., 59 Temple Place - Suite
							 | 
						||
| 
								 | 
							
								330, Boston, MA 02111, USA.</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<p>Verbatim copying and distribution of this entire article is
							 | 
						||
| 
								 | 
							
								permitted in any medium, provided this notice is preserved.</p>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</address>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This document was generated
							 | 
						||
| 
								 | 
							
								by <I>GDB Administrator</I> on <I>March, 27  2008</I>
							 | 
						||
| 
								 | 
							
								using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
							 | 
						||
| 
								 | 
							
								"><I>texi2html</I></A>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</BODY>
							 | 
						||
| 
								 | 
							
								</HTML>
							 |