neingeist
/
arduinisten
Archived
1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

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"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC230"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_4.html#SEC14"> &lt;&lt; </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"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC231"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> &lt;&lt; </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"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <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>&nbsp;</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>&nbsp;</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>&nbsp;</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"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC232"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC232"> &lt;&lt; </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"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <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>&nbsp;</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>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>define hook-echo
echo &#60;&#60;&#60;---
end
define hookpost-echo
echo ---&#62;&#62;&#62;\n
end
(gdb) echo Hello World
&#60;&#60;&#60;---Hello World---&#62;&#62;&#62;
(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"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC233"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC233"> &lt;&lt; </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"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <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>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>gdb &#60; cmds &#62; log 2&#62;&#38;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"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_21.html#SEC229"> &lt;&lt; </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"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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"> &lt;&lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_22.html#SEC234"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <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 &amp; GNU inquiries &amp; 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>