635 lines
		
	
	
	
		
			26 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			635 lines
		
	
	
	
		
			26 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: Sequences</TITLE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<META NAME="description" CONTENT="Debugging with GDB: Sequences">
							 | 
						||
| 
								 | 
							
								<META NAME="keywords" CONTENT="Debugging with GDB: Sequences">
							 | 
						||
| 
								 | 
							
								<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="SEC229"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_20.html#SEC228"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC230"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_4.html#SEC14"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> >> </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> 20. Canned Sequences of Commands </H1>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC229::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Aside from breakpoint commands (see section <A HREF="gdb_6.html#SEC39">Breakpoint Command Lists</A>), GDB provides two ways to store sequences of
							 | 
						||
| 
								 | 
							
								commands for execution as a unit: user-defined commands and command
							 | 
						||
| 
								 | 
							
								files.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_21.html#SEC230">20.1 User-defined Commands</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">How to define your own commands</TD></TR>
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_21.html#SEC231">20.2 User-defined Command Hooks</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Hooks for user-defined commands</TD></TR>
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_21.html#SEC232">20.3 Command Files</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">How to write scripts of commands to be stored in a file</TD></TR>
							 | 
						||
| 
								 | 
							
								<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_21.html#SEC233">20.4 Commands for Controlled Output</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Commands for controlled output</TD></TR>
							 | 
						||
| 
								 | 
							
								</TABLE></BLOCKQUOTE>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Define"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC230"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC231"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> >> </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> 20.1 User-defined Commands </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC230::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1183"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1184"></A>
							 | 
						||
| 
								 | 
							
								A <EM>user-defined command</EM> is a sequence of GDB commands to
							 | 
						||
| 
								 | 
							
								which you assign a new name as a command.  This is done with the
							 | 
						||
| 
								 | 
							
								<CODE>define</CODE> command.  User commands may accept up to 10 arguments
							 | 
						||
| 
								 | 
							
								separated by whitespace.  Arguments are accessed within the user command
							 | 
						||
| 
								 | 
							
								via <CODE>$arg0<small>...</small>$arg9</CODE>.  A trivial example:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>define adder
							 | 
						||
| 
								 | 
							
								  print $arg0 + $arg1 + $arg2
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To execute the command use:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>adder 1 2 3
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This defines the command <CODE>adder</CODE>, which prints the sum of
							 | 
						||
| 
								 | 
							
								its three arguments.  Note the arguments are text substitutions, so they may
							 | 
						||
| 
								 | 
							
								reference variables, use complex expressions, or even perform inferior
							 | 
						||
| 
								 | 
							
								functions calls.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1185"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1186"></A>
							 | 
						||
| 
								 | 
							
								In addition, <CODE>$argc</CODE> may be used to find out how many arguments have
							 | 
						||
| 
								 | 
							
								been passed.  This expands to a number in the range 0<small>...</small>10.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>define adder
							 | 
						||
| 
								 | 
							
								  if $argc == 2
							 | 
						||
| 
								 | 
							
								    print $arg0 + $arg1
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								  if $argc == 3
							 | 
						||
| 
								 | 
							
								    print $arg0 + $arg1 + $arg2
							 | 
						||
| 
								 | 
							
								  end
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1187"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>define <VAR>commandname</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Define a command named <VAR>commandname</VAR>.  If there is already a command
							 | 
						||
| 
								 | 
							
								by that name, you are asked to confirm that you want to redefine it.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The definition of the command is made up of other GDB command lines,
							 | 
						||
| 
								 | 
							
								which are given following the <CODE>define</CODE> command.  The end of these
							 | 
						||
| 
								 | 
							
								commands is marked by a line containing <CODE>end</CODE>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1188"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1189"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>document <VAR>commandname</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Document the user-defined command <VAR>commandname</VAR>, so that it can be
							 | 
						||
| 
								 | 
							
								accessed by <CODE>help</CODE>.  The command <VAR>commandname</VAR> must already be
							 | 
						||
| 
								 | 
							
								defined.  This command reads lines of documentation just as <CODE>define</CODE>
							 | 
						||
| 
								 | 
							
								reads the lines of the command definition, ending with <CODE>end</CODE>.
							 | 
						||
| 
								 | 
							
								After the <CODE>document</CODE> command is finished, <CODE>help</CODE> on command
							 | 
						||
| 
								 | 
							
								<VAR>commandname</VAR> displays the documentation you have written.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You may use the <CODE>document</CODE> command again to change the
							 | 
						||
| 
								 | 
							
								documentation of a command.  Redefining the command with <CODE>define</CODE>
							 | 
						||
| 
								 | 
							
								does not change the documentation.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1190"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1191"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>dont-repeat</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Used inside a user-defined command, this tells GDB that this
							 | 
						||
| 
								 | 
							
								command should not be repeated when the user hits <KBD>RET</KBD>
							 | 
						||
| 
								 | 
							
								(see section <A HREF="gdb_4.html#SEC15">repeat last command</A>).
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1192"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>help user-defined</CODE>
							 | 
						||
| 
								 | 
							
								<DD>List all user-defined commands, with the first line of the documentation
							 | 
						||
| 
								 | 
							
								(if any) for each.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1193"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>show user</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>show user <VAR>commandname</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Display the GDB commands used to define <VAR>commandname</VAR> (but
							 | 
						||
| 
								 | 
							
								not its documentation).  If no <VAR>commandname</VAR> is given, display the
							 | 
						||
| 
								 | 
							
								definitions for all user-defined commands.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1194"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1195"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1196"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>show max-user-call-depth</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>set max-user-call-depth</CODE>
							 | 
						||
| 
								 | 
							
								<DD>The value of <CODE>max-user-call-depth</CODE> controls how many recursion
							 | 
						||
| 
								 | 
							
								levels are allowed in user-defined commands before GDB suspects an
							 | 
						||
| 
								 | 
							
								infinite recursion and aborts the command.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In addition to the above commands, user-defined commands frequently
							 | 
						||
| 
								 | 
							
								use control flow commands, described in <A HREF="gdb_21.html#SEC232">20.3 Command Files</A>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When user-defined commands are executed, the
							 | 
						||
| 
								 | 
							
								commands of the definition are not printed.  An error in any command
							 | 
						||
| 
								 | 
							
								stops execution of the user-defined command.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If used interactively, commands that would ask for confirmation proceed
							 | 
						||
| 
								 | 
							
								without asking when used inside a user-defined command.  Many GDB
							 | 
						||
| 
								 | 
							
								commands that normally print messages to say what they are doing omit the
							 | 
						||
| 
								 | 
							
								messages when used in a user-defined command.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Hooks"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC231"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC230"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC232"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC232"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> >> </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> 20.2 User-defined Command Hooks </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC231::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1197"></A>
							 | 
						||
| 
								 | 
							
								You may define <EM>hooks</EM>, which are a special kind of user-defined
							 | 
						||
| 
								 | 
							
								command.  Whenever you run the command <SAMP>`foo'</SAMP>, if the user-defined
							 | 
						||
| 
								 | 
							
								command <SAMP>`hook-foo'</SAMP> exists, it is executed (with no arguments)
							 | 
						||
| 
								 | 
							
								before that command.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1198"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1199"></A>
							 | 
						||
| 
								 | 
							
								A hook may also be defined which is run after the command you executed.
							 | 
						||
| 
								 | 
							
								Whenever you run the command <SAMP>`foo'</SAMP>, if the user-defined command
							 | 
						||
| 
								 | 
							
								<SAMP>`hookpost-foo'</SAMP> exists, it is executed (with no arguments) after
							 | 
						||
| 
								 | 
							
								that command.  Post-execution hooks may exist simultaneously with
							 | 
						||
| 
								 | 
							
								pre-execution hooks, for the same command.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It is valid for a hook to call the command which it hooks.  If this
							 | 
						||
| 
								 | 
							
								occurs, the hook is not re-executed, thereby avoiding infinite recursion.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1200"></A>
							 | 
						||
| 
								 | 
							
								In addition, a pseudo-command, <SAMP>`stop'</SAMP> exists.  Defining
							 | 
						||
| 
								 | 
							
								(<SAMP>`hook-stop'</SAMP>) makes the associated commands execute every time
							 | 
						||
| 
								 | 
							
								execution stops in your program: before breakpoint commands are run,
							 | 
						||
| 
								 | 
							
								displays are printed, or the stack frame is printed.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example, to ignore <CODE>SIGALRM</CODE> signals while
							 | 
						||
| 
								 | 
							
								single-stepping, but treat them normally during normal execution,
							 | 
						||
| 
								 | 
							
								you could define:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>define hook-stop
							 | 
						||
| 
								 | 
							
								handle SIGALRM nopass
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define hook-run
							 | 
						||
| 
								 | 
							
								handle SIGALRM pass
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define hook-continue
							 | 
						||
| 
								 | 
							
								handle SIGALRM pass
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As a further example, to hook at the beginning and end of the <CODE>echo</CODE>
							 | 
						||
| 
								 | 
							
								command, and to add extra text to the beginning and end of the message,
							 | 
						||
| 
								 | 
							
								you could define:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>define hook-echo
							 | 
						||
| 
								 | 
							
								echo <<<---
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								define hookpost-echo
							 | 
						||
| 
								 | 
							
								echo --->>>\n
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(gdb) echo Hello World
							 | 
						||
| 
								 | 
							
								<<<---Hello World--->>>
							 | 
						||
| 
								 | 
							
								(gdb)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can define a hook for any single-word command in GDB, but
							 | 
						||
| 
								 | 
							
								not for command aliases; you should define a hook for the basic command
							 | 
						||
| 
								 | 
							
								name, e.g.  <CODE>backtrace</CODE> rather than <CODE>bt</CODE>.
							 | 
						||
| 
								 | 
							
								If an error occurs during the execution of your hook, execution of
							 | 
						||
| 
								 | 
							
								GDB commands stops and GDB issues a prompt
							 | 
						||
| 
								 | 
							
								(before the command that you actually typed had a chance to run).
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If you try to define a hook which does not match any known command, you
							 | 
						||
| 
								 | 
							
								get a warning from the <CODE>define</CODE> command.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Command Files"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC232"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC231"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC233"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC233"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> >> </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> 20.3 Command Files </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC232::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1201"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1202"></A>
							 | 
						||
| 
								 | 
							
								A command file for GDB is a text file made of lines that are
							 | 
						||
| 
								 | 
							
								GDB commands.  Comments (lines starting with <KBD>#</KBD>) may
							 | 
						||
| 
								 | 
							
								also be included.  An empty line in a command file does nothing; it
							 | 
						||
| 
								 | 
							
								does not mean to repeat the last command, as it would from the
							 | 
						||
| 
								 | 
							
								terminal.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can request the execution of a command file with the <CODE>source</CODE>
							 | 
						||
| 
								 | 
							
								command:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1203"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1204"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>source [<CODE>-v</CODE>] <VAR>filename</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Execute the command file <VAR>filename</VAR>.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The lines in a command file are generally executed sequentially,
							 | 
						||
| 
								 | 
							
								unless the order of execution is changed by one of the
							 | 
						||
| 
								 | 
							
								<EM>flow-control commands</EM> described below.  The commands are not
							 | 
						||
| 
								 | 
							
								printed as they are executed.  An error in any command terminates
							 | 
						||
| 
								 | 
							
								execution of the command file and control is returned to the console.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GDB searches for <VAR>filename</VAR> in the current directory and then
							 | 
						||
| 
								 | 
							
								on the search path (specified with the <SAMP>`directory'</SAMP> command).
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If <CODE>-v</CODE>, for verbose mode, is given then GDB displays
							 | 
						||
| 
								 | 
							
								each command as it is executed.  The option must be given before
							 | 
						||
| 
								 | 
							
								<VAR>filename</VAR>, and is interpreted as part of the filename anywhere else.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Commands that would ask for confirmation if used interactively proceed
							 | 
						||
| 
								 | 
							
								without asking when used in a command file.  Many GDB commands that
							 | 
						||
| 
								 | 
							
								normally print messages to say what they are doing omit the messages
							 | 
						||
| 
								 | 
							
								when called from command files.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GDB also accepts command input from standard input.  In this
							 | 
						||
| 
								 | 
							
								mode, normal output goes to standard output and error output goes to
							 | 
						||
| 
								 | 
							
								standard error.  Errors in a command file supplied on standard input do
							 | 
						||
| 
								 | 
							
								not terminate execution of the command file--execution continues with
							 | 
						||
| 
								 | 
							
								the next command.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>gdb < cmds > log 2>&1
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(The syntax above will vary depending on the shell used.) This example
							 | 
						||
| 
								 | 
							
								will execute commands from the file <TT>`cmds'</TT>. All output and errors
							 | 
						||
| 
								 | 
							
								would be directed to <TT>`log'</TT>.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Since commands stored on command files tend to be more general than
							 | 
						||
| 
								 | 
							
								commands typed interactively, they frequently need to deal with
							 | 
						||
| 
								 | 
							
								complicated situations, such as different or unexpected values of
							 | 
						||
| 
								 | 
							
								variables and symbols, changes in how the program being debugged is
							 | 
						||
| 
								 | 
							
								built, etc.  GDB provides a set of flow-control commands to
							 | 
						||
| 
								 | 
							
								deal with these complexities.  Using these commands, you can write
							 | 
						||
| 
								 | 
							
								complex scripts that loop over data structures, execute commands
							 | 
						||
| 
								 | 
							
								conditionally, etc.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1205"></A>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1206"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>if</CODE>
							 | 
						||
| 
								 | 
							
								<DD><DT><CODE>else</CODE>
							 | 
						||
| 
								 | 
							
								<DD>This command allows to include in your script conditionally executed
							 | 
						||
| 
								 | 
							
								commands. The <CODE>if</CODE> command takes a single argument, which is an
							 | 
						||
| 
								 | 
							
								expression to evaluate.  It is followed by a series of commands that
							 | 
						||
| 
								 | 
							
								are executed only if the expression is true (its value is nonzero).
							 | 
						||
| 
								 | 
							
								There can then optionally be an <CODE>else</CODE> line, followed by a series
							 | 
						||
| 
								 | 
							
								of commands that are only executed if the expression was false.  The
							 | 
						||
| 
								 | 
							
								end of the list is marked by a line containing <CODE>end</CODE>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1207"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>while</CODE>
							 | 
						||
| 
								 | 
							
								<DD>This command allows to write loops.  Its syntax is similar to
							 | 
						||
| 
								 | 
							
								<CODE>if</CODE>: the command takes a single argument, which is an expression
							 | 
						||
| 
								 | 
							
								to evaluate, and must be followed by the commands to execute, one per
							 | 
						||
| 
								 | 
							
								line, terminated by an <CODE>end</CODE>.  These commands are called the
							 | 
						||
| 
								 | 
							
								<EM>body</EM> of the loop.  The commands in the body of <CODE>while</CODE> are
							 | 
						||
| 
								 | 
							
								executed repeatedly as long as the expression evaluates to true.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1208"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>loop_break</CODE>
							 | 
						||
| 
								 | 
							
								<DD>This command exits the <CODE>while</CODE> loop in whose body it is included.
							 | 
						||
| 
								 | 
							
								Execution of the script continues after that <CODE>while</CODE>s <CODE>end</CODE>
							 | 
						||
| 
								 | 
							
								line.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1209"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>loop_continue</CODE>
							 | 
						||
| 
								 | 
							
								<DD>This command skips the execution of the rest of the body of commands
							 | 
						||
| 
								 | 
							
								in the <CODE>while</CODE> loop in whose body it is included.  Execution
							 | 
						||
| 
								 | 
							
								branches to the beginning of the <CODE>while</CODE> loop, where it evaluates
							 | 
						||
| 
								 | 
							
								the controlling expression.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1210"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>end</CODE>
							 | 
						||
| 
								 | 
							
								<DD>Terminate the block of commands that are the body of <CODE>if</CODE>,
							 | 
						||
| 
								 | 
							
								<CODE>else</CODE>, or <CODE>while</CODE> flow-control commands.
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Output"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<A NAME="SEC233"></A>
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC232"> < </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> > </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> Up </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> >> </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> 20.4 Commands for Controlled Output </H2>
							 | 
						||
| 
								 | 
							
								<!--docid::SEC233::-->
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								During the execution of a command file or a user-defined command, normal
							 | 
						||
| 
								 | 
							
								GDB output is suppressed; the only output that appears is what is
							 | 
						||
| 
								 | 
							
								explicitly printed by the commands in the definition.  This section
							 | 
						||
| 
								 | 
							
								describes three commands useful for generating exactly the output you
							 | 
						||
| 
								 | 
							
								want.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DL COMPACT>
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1211"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>echo <VAR>text</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print <VAR>text</VAR>.  Nonprinting characters can be included in
							 | 
						||
| 
								 | 
							
								<VAR>text</VAR> using C escape sequences, such as <SAMP>`\n'</SAMP> to print a
							 | 
						||
| 
								 | 
							
								newline.  <STRONG>No newline is printed unless you specify one.</STRONG>
							 | 
						||
| 
								 | 
							
								In addition to the standard C escape sequences, a backslash followed
							 | 
						||
| 
								 | 
							
								by a space stands for a space.  This is useful for displaying a
							 | 
						||
| 
								 | 
							
								string with spaces at the beginning or the end, since leading and
							 | 
						||
| 
								 | 
							
								trailing spaces are otherwise trimmed from all arguments.
							 | 
						||
| 
								 | 
							
								To print <SAMP>` and foo = '</SAMP>, use the command
							 | 
						||
| 
								 | 
							
								<SAMP>`echo \ and foo = \ '</SAMP>.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A backslash at the end of <VAR>text</VAR> can be used, as in C, to continue
							 | 
						||
| 
								 | 
							
								the command onto subsequent lines.  For example,
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>echo This is some text\n\
							 | 
						||
| 
								 | 
							
								which is continued\n\
							 | 
						||
| 
								 | 
							
								onto several lines.\n
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								produces the same output as
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>echo This is some text\n
							 | 
						||
| 
								 | 
							
								echo which is continued\n
							 | 
						||
| 
								 | 
							
								echo onto several lines.\n
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1212"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>output <VAR>expression</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print the value of <VAR>expression</VAR> and nothing but that value: no
							 | 
						||
| 
								 | 
							
								newlines, no <SAMP>`$<VAR>nn</VAR> = '</SAMP>.  The value is not entered in the
							 | 
						||
| 
								 | 
							
								value history either.  See section <A HREF="gdb_9.html#SEC60">Expressions</A>, for more information
							 | 
						||
| 
								 | 
							
								on expressions.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<DT><CODE>output/<VAR>fmt</VAR> <VAR>expression</VAR></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print the value of <VAR>expression</VAR> in format <VAR>fmt</VAR>.  You can use
							 | 
						||
| 
								 | 
							
								the same formats as for <CODE>print</CODE>.  See section <A HREF="gdb_9.html#SEC63">Output Formats</A>, for more information.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="IDX1213"></A>
							 | 
						||
| 
								 | 
							
								<DT><CODE>printf <VAR>template</VAR>, <VAR>expressions</VAR><small>...</small></CODE>
							 | 
						||
| 
								 | 
							
								<DD>Print the values of one or more <VAR>expressions</VAR> under the control of
							 | 
						||
| 
								 | 
							
								the string <VAR>template</VAR>.  To print several values, make
							 | 
						||
| 
								 | 
							
								<VAR>expressions</VAR> be a comma-separated list of individual expressions,
							 | 
						||
| 
								 | 
							
								which may be either numbers or pointers.  Their values are printed as
							 | 
						||
| 
								 | 
							
								specified by <VAR>template</VAR>, exactly as a C program would do by
							 | 
						||
| 
								 | 
							
								executing the code below:
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>printf (<VAR>template</VAR>, <VAR>expressions</VAR><small>...</small>);
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As in <CODE>C</CODE> <CODE>printf</CODE>, ordinary characters in <VAR>template</VAR>
							 | 
						||
| 
								 | 
							
								are printed verbatim, while <EM>conversion specification</EM> introduced
							 | 
						||
| 
								 | 
							
								by the <SAMP>`%'</SAMP> character cause subsequent <VAR>expressions</VAR> to be
							 | 
						||
| 
								 | 
							
								evaluated, their values converted and formatted according to type and
							 | 
						||
| 
								 | 
							
								style information encoded in the conversion specifications, and then
							 | 
						||
| 
								 | 
							
								printed.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example, you can print two values in hex like this:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<CODE>printf</CODE> supports all the standard <CODE>C</CODE> conversion
							 | 
						||
| 
								 | 
							
								specifications, including the flags and modifiers between the <SAMP>`%'</SAMP>
							 | 
						||
| 
								 | 
							
								character and the conversion letter, with the following exceptions:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<UL>
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								The argument-ordering modifiers, such as <SAMP>`2$'</SAMP>, are not supported.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								The modifier <SAMP>`*'</SAMP> is not supported for specifying precision or
							 | 
						||
| 
								 | 
							
								width.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								The <SAMP>`''</SAMP> flag (for separation of digits into groups according to
							 | 
						||
| 
								 | 
							
								<CODE>LC_NUMERIC'</CODE>) is not supported.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								The type modifiers <SAMP>`hh'</SAMP>, <SAMP>`j'</SAMP>, <SAMP>`t'</SAMP>, and <SAMP>`z'</SAMP> are not
							 | 
						||
| 
								 | 
							
								supported.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								The conversion letter <SAMP>`n'</SAMP> (as in <SAMP>`%n'</SAMP>) is not supported.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								The conversion letters <SAMP>`a'</SAMP> and <SAMP>`A'</SAMP> are not supported.
							 | 
						||
| 
								 | 
							
								</UL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Note that the <SAMP>`ll'</SAMP> type modifier is supported only if the
							 | 
						||
| 
								 | 
							
								underlying <CODE>C</CODE> implementation used to build GDB supports
							 | 
						||
| 
								 | 
							
								the <CODE>long long int</CODE> type, and the <SAMP>`L'</SAMP> type modifier is
							 | 
						||
| 
								 | 
							
								supported only if <CODE>long double</CODE> type is available.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As in <CODE>C</CODE>, <CODE>printf</CODE> supports simple backslash-escape
							 | 
						||
| 
								 | 
							
								sequences, such as <CODE>\n</CODE>, <SAMP>`\t'</SAMP>, <SAMP>`\\'</SAMP>, <SAMP>`\"'</SAMP>,
							 | 
						||
| 
								 | 
							
								<SAMP>`\a'</SAMP>, and <SAMP>`\f'</SAMP>, that consist of backslash followed by a
							 | 
						||
| 
								 | 
							
								single character.  Octal and hexadecimal escape sequences are not
							 | 
						||
| 
								 | 
							
								supported.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Additionally, <CODE>printf</CODE> supports conversion specifications for DFP
							 | 
						||
| 
								 | 
							
								(<EM>Decimal Floating Point</EM>) types using the following length modifiers
							 | 
						||
| 
								 | 
							
								together with a floating point specifier.
							 | 
						||
| 
								 | 
							
								letters:
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<UL>
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								<SAMP>`H'</SAMP> for printing <CODE>Decimal32</CODE> types.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								<SAMP>`D'</SAMP> for printing <CODE>Decimal64</CODE> types.
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<LI>
							 | 
						||
| 
								 | 
							
								<SAMP>`DD'</SAMP> for printing <CODE>Decimal128</CODE> types.
							 | 
						||
| 
								 | 
							
								</UL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If the underlying <CODE>C</CODE> implementation used to build GDB has
							 | 
						||
| 
								 | 
							
								support for the three length modifiers for DFP types, other modifiers
							 | 
						||
| 
								 | 
							
								such as width and precision will also be available for GDB to use.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In case there is no such <CODE>C</CODE> support, no additional modifiers will be
							 | 
						||
| 
								 | 
							
								available and the value will be printed in the standard way.
							 | 
						||
| 
								 | 
							
								</P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Here's an example of printing DFP types using the above conversion letters:
							 | 
						||
| 
								 | 
							
								<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>printf "D32: %Hf - D64: %Df - D128: %DDf\n",1.2345df,1.2E10dd,1.2E1dl
							 | 
						||
| 
								 | 
							
								</FONT></pre></td></tr></table></P><P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</DL>
							 | 
						||
| 
								 | 
							
								<P>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<A NAME="Interpreters"></A>
							 | 
						||
| 
								 | 
							
								<HR SIZE="6">
							 | 
						||
| 
								 | 
							
								<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
							 | 
						||
| 
								 | 
							
								<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> << </A>]</TD>
							 | 
						||
| 
								 | 
							
								<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> >> </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>
							 |