2596 lines
		
	
	
	
		
			109 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2596 lines
		
	
	
	
		
			109 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: Data</TITLE>
 | 
						|
 | 
						|
<META NAME="description" CONTENT="Debugging with GDB: Data">
 | 
						|
<META NAME="keywords" CONTENT="Debugging with GDB: Data">
 | 
						|
<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="SEC59"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC58"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC60"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8. Examining Data </H1>
 | 
						|
<!--docid::SEC59::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX367"></A>
 | 
						|
<A NAME="IDX368"></A>
 | 
						|
<A NAME="IDX369"></A>
 | 
						|
<A NAME="IDX370"></A>
 | 
						|
The usual way to examine data in your program is with the <CODE>print</CODE>
 | 
						|
command (abbreviated <CODE>p</CODE>), or its synonym <CODE>inspect</CODE>.  It
 | 
						|
evaluates and prints the value of an expression of the language your
 | 
						|
program is written in (see section <A HREF="gdb_13.html#SEC102">Using GDB with Different Languages</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>print <VAR>expr</VAR></CODE>
 | 
						|
<DD><DT><CODE>print /<VAR>f</VAR> <VAR>expr</VAR></CODE>
 | 
						|
<DD><VAR>expr</VAR> is an expression (in the source language).  By default the
 | 
						|
value of <VAR>expr</VAR> is printed in a format appropriate to its data type;
 | 
						|
you can choose a different format by specifying <SAMP>`/<VAR>f</VAR>'</SAMP>, where
 | 
						|
<VAR>f</VAR> is a letter specifying the format; see <A HREF="gdb_9.html#SEC63">Output Formats</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>print</CODE>
 | 
						|
<DD><DT><CODE>print /<VAR>f</VAR></CODE>
 | 
						|
<DD><A NAME="IDX371"></A>
 | 
						|
If you omit <VAR>expr</VAR>, GDB displays the last value again (from the
 | 
						|
<EM>value history</EM>; see section <A HREF="gdb_9.html#SEC67">Value History</A>).  This allows you to
 | 
						|
conveniently inspect the same value in an alternative format.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
A more low-level way of examining data is with the <CODE>x</CODE> command.
 | 
						|
It examines data in memory at a specified address and prints it in a
 | 
						|
specified format.  See section <A HREF="gdb_9.html#SEC64">Examining Memory</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you are interested in information about types, or about how the
 | 
						|
fields of a struct or a class are declared, use the <CODE>ptype <VAR>exp</VAR></CODE>
 | 
						|
command rather than <CODE>print</CODE>.  See section <A HREF="gdb_14.html#SEC146">Examining the Symbol Table</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC60">8.1 Expressions</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC61">8.2 Program Variables</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Program variables</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC62">8.3 Artificial Arrays</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Artificial arrays</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC63">8.4 Output Formats</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Output formats</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC64">8.5 Examining Memory</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Examining memory</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC65">8.6 Automatic Display</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Automatic display</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC66">8.7 Print Settings</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Print settings</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC67">8.8 Value History</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Value history</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC68">8.9 Convenience Variables</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Convenience variables</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC69">8.10 Registers</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC70">8.11 Floating Point Hardware</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Floating point hardware</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC71">8.12 Vector Unit</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC72">8.13 Operating System Auxiliary Information</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Auxiliary data provided by operating system</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC73">8.14 Memory Region Attributes</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Memory region attributes</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC79">8.15 Copy Between Memory and a File</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Copy between memory and a file</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC80">8.16 How to Produce a Core File from Your Program</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Cause a program dump its core</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC81">8.17 Character Sets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Debugging programs that use a different
 | 
						|
                                character set than GDB does</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_9.html#SEC82">8.18 Caching Data of Remote Targets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Data caching for remote targets</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Expressions"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC60"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.1 Expressions </H2>
 | 
						|
<!--docid::SEC60::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX372"></A>
 | 
						|
<CODE>print</CODE> and many other GDB commands accept an expression and
 | 
						|
compute its value.  Any kind of constant, variable or operator defined
 | 
						|
by the programming language you are using is valid in an expression in
 | 
						|
GDB.  This includes conditional expressions, function calls,
 | 
						|
casts, and string constants.  It also includes preprocessor macros, if
 | 
						|
you compiled your program to include this information; see
 | 
						|
<A HREF="gdb_5.html#SEC19">4.1 Compiling for Debugging</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX373"></A>
 | 
						|
GDB supports array constants in expressions input by
 | 
						|
the user.  The syntax is {<VAR>element</VAR>, <VAR>element</VAR><small>...</small>}.  For example,
 | 
						|
you can use the command <CODE>print {1, 2, 3}</CODE> to build up an array in
 | 
						|
memory that is <CODE>malloc</CODE>ed in the target program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Because C is so widespread, most of the expressions shown in examples in
 | 
						|
this manual are in C.  See section <A HREF="gdb_13.html#SEC102">Using GDB with Different Languages</A>, for information on how to use expressions in other
 | 
						|
languages.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In this section, we discuss operators that you can use in GDB
 | 
						|
expressions regardless of your programming language.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX374"></A>
 | 
						|
Casts are supported in all languages, not just in C, because it is so
 | 
						|
useful to cast a number into a pointer in order to examine a structure
 | 
						|
at that address in memory.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB supports these operators, in addition to those common
 | 
						|
to programming languages:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>@</CODE>
 | 
						|
<DD><SAMP>`@'</SAMP> is a binary operator for treating parts of memory as arrays.
 | 
						|
See section <A HREF="gdb_9.html#SEC62">Artificial Arrays</A>, for more information.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>::</CODE>
 | 
						|
<DD><SAMP>`::'</SAMP> allows you to specify a variable in terms of the file or
 | 
						|
function where it is defined.  See section <A HREF="gdb_9.html#SEC61">Program Variables</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX375"></A>
 | 
						|
<A NAME="IDX376"></A>
 | 
						|
<A NAME="IDX377"></A>
 | 
						|
<A NAME="IDX378"></A>
 | 
						|
<DT><CODE>{<VAR>type</VAR>} <VAR>addr</VAR></CODE>
 | 
						|
<DD>Refers to an object of type <VAR>type</VAR> stored at address <VAR>addr</VAR> in
 | 
						|
memory.  <VAR>addr</VAR> may be any expression whose value is an integer or
 | 
						|
pointer (but parentheses are required around binary operators, just as in
 | 
						|
a cast).  This construct is allowed regardless of what kind of data is
 | 
						|
normally supposed to reside at <VAR>addr</VAR>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Variables"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC61"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC60"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC62"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC62"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.2 Program Variables </H2>
 | 
						|
<!--docid::SEC61::-->
 | 
						|
<P>
 | 
						|
 | 
						|
The most common kind of expression to use is the name of a variable
 | 
						|
in your program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Variables in expressions are understood in the selected stack frame
 | 
						|
(see section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>); they must be either:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
global (or file-static)
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
or
 | 
						|
</P><P>
 | 
						|
 | 
						|
<UL>
 | 
						|
<LI>
 | 
						|
visible according to the scope rules of the
 | 
						|
programming language from the point of execution in that frame
 | 
						|
</UL>
 | 
						|
<P>
 | 
						|
 | 
						|
This means that in the function
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>foo (a)
 | 
						|
     int a;
 | 
						|
{
 | 
						|
  bar (a);
 | 
						|
  {
 | 
						|
    int b = test ();
 | 
						|
    bar (b);
 | 
						|
  }
 | 
						|
}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
you can examine and use the variable <CODE>a</CODE> whenever your program is
 | 
						|
executing within the function <CODE>foo</CODE>, but you can only use or
 | 
						|
examine the variable <CODE>b</CODE> while your program is executing inside
 | 
						|
the block where <CODE>b</CODE> is declared.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX379"></A>
 | 
						|
There is an exception: you can refer to a variable or function whose
 | 
						|
scope is a single source file even if the current execution point is not
 | 
						|
in this file.  But it is possible to have more than one such variable or
 | 
						|
function with the same name (in different source files).  If that
 | 
						|
happens, referring to that name has unpredictable effects.  If you wish,
 | 
						|
you can specify a static variable in a particular function or file,
 | 
						|
using the colon-colon (<CODE>::</CODE>) notation:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX380"></A>
 | 
						|
<A NAME="IDX381"></A>
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><VAR>file</VAR>::<VAR>variable</VAR>
 | 
						|
<VAR>function</VAR>::<VAR>variable</VAR>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Here <VAR>file</VAR> or <VAR>function</VAR> is the name of the context for the
 | 
						|
static <VAR>variable</VAR>.  In the case of file names, you can use quotes to
 | 
						|
make sure GDB parses the file name as a single word--for example,
 | 
						|
to print a global value of <CODE>x</CODE> defined in <TT>`f2.c'</TT>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) p 'f2.c'::x
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX382"></A>
 | 
						|
This use of <SAMP>`::'</SAMP> is very rarely in conflict with the very similar
 | 
						|
use of the same notation in C<TT>++</TT>.  GDB also supports use of the C<TT>++</TT>
 | 
						|
scope resolution operator in GDB expressions.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX383"></A>
 | 
						|
<A NAME="IDX384"></A>
 | 
						|
<A NAME="IDX385"></A>
 | 
						|
<A NAME="IDX386"></A>
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> Occasionally, a local variable may appear to have the
 | 
						|
wrong value at certain points in a function--just after entry to a new
 | 
						|
scope, and just before exit.
 | 
						|
</BLOCKQUOTE>
 | 
						|
You may see this problem when you are stepping by machine instructions.
 | 
						|
This is because, on most machines, it takes more than one instruction to
 | 
						|
set up a stack frame (including local variable definitions); if you are
 | 
						|
stepping by machine instructions, variables may appear to have the wrong
 | 
						|
values until the stack frame is completely built.  On exit, it usually
 | 
						|
also takes more than one machine instruction to destroy a stack frame;
 | 
						|
after you begin stepping through that group of instructions, local
 | 
						|
variable definitions may be gone.
 | 
						|
<P>
 | 
						|
 | 
						|
This may also happen when the compiler does significant optimizations.
 | 
						|
To be sure of always seeing accurate values, turn off all optimization
 | 
						|
when compiling.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX387"></A>
 | 
						|
Another possible effect of compiler optimizations is to optimize
 | 
						|
unused variables out of existence, or assign variables to registers (as
 | 
						|
opposed to memory addresses).  Depending on the support for such cases
 | 
						|
offered by the debug info format used by the compiler, GDB
 | 
						|
might not be able to display values for such local variables.  If that
 | 
						|
happens, GDB will print a message like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>No symbol "foo" in current context.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
To solve such problems, either recompile without optimizations, or use a
 | 
						|
different debug info format, if the compiler supports several such
 | 
						|
formats.  For example, GCC, the GNU C/C<TT>++</TT> compiler,
 | 
						|
usually supports the <SAMP>`-gstabs+'</SAMP> option.  <SAMP>`-gstabs+'</SAMP>
 | 
						|
produces debug info in a format that is superior to formats such as
 | 
						|
COFF.  You may be able to use DWARF 2 (<SAMP>`-gdwarf-2'</SAMP>), which is also
 | 
						|
an effective form for debug info.  See section `Options for Debugging Your Program or GCC' in <CITE>Using the GNU Compiler Collection (GCC)</CITE>.
 | 
						|
See section <A HREF="gdb_13.html#SEC112">C and C<TT>++</TT></A>, for more information about debug info formats
 | 
						|
that are best suited to C<TT>++</TT> programs.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you ask to print an object whose contents are unknown to
 | 
						|
GDB, e.g., because its data type is not completely specified
 | 
						|
by the debug information, GDB will say <SAMP>`<incomplete
 | 
						|
type>'</SAMP>.  See section <A HREF="gdb_14.html#SEC146">incomplete type</A>, for more about this.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Strings are identified as arrays of <CODE>char</CODE> values without specified
 | 
						|
signedness.  Arrays of either <CODE>signed char</CODE> or <CODE>unsigned char</CODE> get
 | 
						|
printed as arrays of 1 byte sized integers.  <CODE>-fsigned-char</CODE> or
 | 
						|
<CODE>-funsigned-char</CODE> GCC options have no effect as GDB
 | 
						|
defines literal string type <CODE>"char"</CODE> as <CODE>char</CODE> without a sign.
 | 
						|
For program code
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>char var0[] = "A";
 | 
						|
signed char var1[] = "A";
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
You get during debugging
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print var0
 | 
						|
$1 = "A"
 | 
						|
(gdb) print var1
 | 
						|
$2 = {65 'A', 0 '\0'}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="Arrays"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC62"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC63"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC63"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.3 Artificial Arrays </H2>
 | 
						|
<!--docid::SEC62::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX388"></A>
 | 
						|
<A NAME="IDX389"></A>
 | 
						|
<A NAME="IDX390"></A>
 | 
						|
It is often useful to print out several successive objects of the
 | 
						|
same type in memory; a section of an array, or an array of
 | 
						|
dynamically determined size for which only a pointer exists in the
 | 
						|
program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can do this by referring to a contiguous span of memory as an
 | 
						|
<EM>artificial array</EM>, using the binary operator <SAMP>`@'</SAMP>.  The left
 | 
						|
operand of <SAMP>`@'</SAMP> should be the first element of the desired array
 | 
						|
and be an individual object.  The right operand should be the desired length
 | 
						|
of the array.  The result is an array value whose elements are all of
 | 
						|
the type of the left argument.  The first element is actually the left
 | 
						|
argument; the second element comes from bytes of memory immediately
 | 
						|
following those that hold the first element, and so on.  Here is an
 | 
						|
example.  If a program says
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int *array = (int *) malloc (len * sizeof (int));
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
you can print the contents of <CODE>array</CODE> with
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>p *array@len
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The left operand of <SAMP>`@'</SAMP> must reside in memory.  Array values made
 | 
						|
with <SAMP>`@'</SAMP> in this way behave just like other arrays in terms of
 | 
						|
subscripting, and are coerced to pointers when used in expressions.
 | 
						|
Artificial arrays most often appear in expressions via the value history
 | 
						|
(see section <A HREF="gdb_9.html#SEC67">Value History</A>), after printing one out.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Another way to create an artificial array is to use a cast.
 | 
						|
This re-interprets a value as if it were an array.
 | 
						|
The value need not be in memory:
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) p/x (short[2])0x12345678
 | 
						|
$1 = {0x1234, 0x5678}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
As a convenience, if you leave the array length out (as in
 | 
						|
<SAMP>`(<VAR>type</VAR>[])<VAR>value</VAR>'</SAMP>) GDB calculates the size to fill
 | 
						|
the value (as <SAMP>`sizeof(<VAR>value</VAR>)/sizeof(<VAR>type</VAR>)'</SAMP>:
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) p/x (short[])0x12345678
 | 
						|
$2 = {0x1234, 0x5678}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Sometimes the artificial array mechanism is not quite enough; in
 | 
						|
moderately complex data structures, the elements of interest may not
 | 
						|
actually be adjacent--for example, if you are interested in the values
 | 
						|
of pointers in an array.  One useful work-around in this situation is
 | 
						|
to use a convenience variable (see section <A HREF="gdb_9.html#SEC68">Convenience Variables</A>) as a counter in an expression that prints the first
 | 
						|
interesting value, and then repeat that expression via <KBD>RET</KBD>.  For
 | 
						|
instance, suppose you have an array <CODE>dtab</CODE> of pointers to
 | 
						|
structures, and you are interested in the values of a field <CODE>fv</CODE>
 | 
						|
in each structure.  Here is an example of what you might type:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set $i = 0
 | 
						|
p dtab[$i++]->fv
 | 
						|
<KBD>RET</KBD>
 | 
						|
<KBD>RET</KBD>
 | 
						|
<small>...</small>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="Output Formats"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC63"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC62"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC64"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC64"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.4 Output Formats </H2>
 | 
						|
<!--docid::SEC63::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX391"></A>
 | 
						|
<A NAME="IDX392"></A>
 | 
						|
By default, GDB prints a value according to its data type.  Sometimes
 | 
						|
this is not what you want.  For example, you might want to print a number
 | 
						|
in hex, or a pointer in decimal.  Or you might want to view data in memory
 | 
						|
at a certain address as a character string or as an instruction.  To do
 | 
						|
these things, specify an <EM>output format</EM> when you print a value.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The simplest use of output formats is to say how to print a value
 | 
						|
already computed.  This is done by starting the arguments of the
 | 
						|
<CODE>print</CODE> command with a slash and a format letter.  The format
 | 
						|
letters supported are:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>x</CODE>
 | 
						|
<DD>Regard the bits of the value as an integer, and print the integer in
 | 
						|
hexadecimal.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>d</CODE>
 | 
						|
<DD>Print as integer in signed decimal.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>u</CODE>
 | 
						|
<DD>Print as integer in unsigned decimal.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>o</CODE>
 | 
						|
<DD>Print as integer in octal.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>t</CODE>
 | 
						|
<DD>Print as integer in binary.  The letter <SAMP>`t'</SAMP> stands for "two".
 | 
						|
<A NAME="DOCF5" HREF="gdb_fot.html#FOOT5">(5)</A>
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>a</CODE>
 | 
						|
<DD><A NAME="IDX393"></A>
 | 
						|
<A NAME="IDX394"></A>
 | 
						|
Print as an address, both absolute in hexadecimal and as an offset from
 | 
						|
the nearest preceding symbol.  You can use this format used to discover
 | 
						|
where (in what function) an unknown address is located:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) p/a 0x54320
 | 
						|
$3 = 0x54320 <_initialize_vx+396>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The command <CODE>info symbol 0x54320</CODE> yields similar results.
 | 
						|
See section <A HREF="gdb_14.html#SEC146">info symbol</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>c</CODE>
 | 
						|
<DD>Regard as an integer and print it as a character constant.  This
 | 
						|
prints both the numerical value and its character representation.  The
 | 
						|
character representation is replaced with the octal escape <SAMP>`\nnn'</SAMP>
 | 
						|
for characters outside the 7-bit ASCII range.
 | 
						|
<P>
 | 
						|
 | 
						|
Without this format, GDB displays <CODE>char</CODE>,
 | 
						|
<CODE>unsigned char</CODE>, and <CODE>signed char</CODE> data as character
 | 
						|
constants.  Single-byte members of vectors are displayed as integer
 | 
						|
data.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>f</CODE>
 | 
						|
<DD>Regard the bits of the value as a floating point number and print
 | 
						|
using typical floating point syntax.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>s</CODE>
 | 
						|
<DD><A NAME="IDX395"></A>
 | 
						|
<A NAME="IDX396"></A>
 | 
						|
Regard as a string, if possible.  With this format, pointers to single-byte
 | 
						|
data are displayed as null-terminated strings and arrays of single-byte data
 | 
						|
are displayed as fixed-length strings.  Other values are displayed in their
 | 
						|
natural types.
 | 
						|
<P>
 | 
						|
 | 
						|
Without this format, GDB displays pointers to and arrays of
 | 
						|
<CODE>char</CODE>, <CODE>unsigned char</CODE>, and <CODE>signed char</CODE> as
 | 
						|
strings.  Single-byte members of a vector are displayed as an integer
 | 
						|
array.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
For example, to print the program counter in hex (see section <A HREF="gdb_9.html#SEC69">8.10 Registers</A>), type
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>p/x $pc
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Note that no space is required before the slash; this is because command
 | 
						|
names in GDB cannot contain a slash.
 | 
						|
</P><P>
 | 
						|
 | 
						|
To reprint the last value in the value history with a different format,
 | 
						|
you can use the <CODE>print</CODE> command with just a format and no
 | 
						|
expression.  For example, <SAMP>`p/x'</SAMP> reprints the last value in hex.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Memory"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC64"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC63"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC65"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC65"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.5 Examining Memory </H2>
 | 
						|
<!--docid::SEC64::-->
 | 
						|
<P>
 | 
						|
 | 
						|
You can use the command <CODE>x</CODE> (for "examine") to examine memory in
 | 
						|
any of several formats, independently of your program's data types.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX397"></A>
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX398"></A>
 | 
						|
<DT><CODE>x/<VAR>nfu</VAR> <VAR>addr</VAR></CODE>
 | 
						|
<DD><DT><CODE>x <VAR>addr</VAR></CODE>
 | 
						|
<DD><DT><CODE>x</CODE>
 | 
						|
<DD>Use the <CODE>x</CODE> command to examine memory.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<VAR>n</VAR>, <VAR>f</VAR>, and <VAR>u</VAR> are all optional parameters that specify how
 | 
						|
much memory to display and how to format it; <VAR>addr</VAR> is an
 | 
						|
expression giving the address where you want to start displaying memory.
 | 
						|
If you use defaults for <VAR>nfu</VAR>, you need not type the slash <SAMP>`/'</SAMP>.
 | 
						|
Several commands set convenient defaults for <VAR>addr</VAR>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><VAR>n</VAR>, the repeat count
 | 
						|
<DD>The repeat count is a decimal integer; the default is 1.  It specifies
 | 
						|
how much memory (counting by units <VAR>u</VAR>) to display.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>f</VAR>, the display format
 | 
						|
<DD>The display format is one of the formats used by <CODE>print</CODE>
 | 
						|
(<SAMP>`x'</SAMP>, <SAMP>`d'</SAMP>, <SAMP>`u'</SAMP>, <SAMP>`o'</SAMP>, <SAMP>`t'</SAMP>, <SAMP>`a'</SAMP>, <SAMP>`c'</SAMP>,
 | 
						|
<SAMP>`f'</SAMP>, <SAMP>`s'</SAMP>), and in addition <SAMP>`i'</SAMP> (for machine instructions).
 | 
						|
The default is <SAMP>`x'</SAMP> (hexadecimal) initially.  The default changes
 | 
						|
each time you use either <CODE>x</CODE> or <CODE>print</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><VAR>u</VAR>, the unit size
 | 
						|
<DD>The unit size is any of
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>b</CODE>
 | 
						|
<DD>Bytes.
 | 
						|
<DT><CODE>h</CODE>
 | 
						|
<DD>Halfwords (two bytes).
 | 
						|
<DT><CODE>w</CODE>
 | 
						|
<DD>Words (four bytes).  This is the initial default.
 | 
						|
<DT><CODE>g</CODE>
 | 
						|
<DD>Giant words (eight bytes).
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Each time you specify a unit size with <CODE>x</CODE>, that size becomes the
 | 
						|
default unit the next time you use <CODE>x</CODE>.  (For the <SAMP>`s'</SAMP> and
 | 
						|
<SAMP>`i'</SAMP> formats, the unit size is ignored and is normally not written.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><VAR>addr</VAR>, starting display address
 | 
						|
<DD><VAR>addr</VAR> is the address where you want GDB to begin displaying
 | 
						|
memory.  The expression need not have a pointer value (though it may);
 | 
						|
it is always interpreted as an integer address of a byte of memory.
 | 
						|
See section <A HREF="gdb_9.html#SEC60">Expressions</A>, for more information on expressions.  The default for
 | 
						|
<VAR>addr</VAR> is usually just after the last address examined--but several
 | 
						|
other commands also set the default address: <CODE>info breakpoints</CODE> (to
 | 
						|
the address of the last breakpoint listed), <CODE>info line</CODE> (to the
 | 
						|
starting address of a line), and <CODE>print</CODE> (if you use it to display
 | 
						|
a value from memory).
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
For example, <SAMP>`x/3uh 0x54320'</SAMP> is a request to display three halfwords
 | 
						|
(<CODE>h</CODE>) of memory, formatted as unsigned decimal integers (<SAMP>`u'</SAMP>),
 | 
						|
starting at address <CODE>0x54320</CODE>.  <SAMP>`x/4xw $sp'</SAMP> prints the four
 | 
						|
words (<SAMP>`w'</SAMP>) of memory above the stack pointer (here, <SAMP>`$sp'</SAMP>;
 | 
						|
see section <A HREF="gdb_9.html#SEC69">Registers</A>) in hexadecimal (<SAMP>`x'</SAMP>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
Since the letters indicating unit sizes are all distinct from the
 | 
						|
letters specifying output formats, you do not have to remember whether
 | 
						|
unit size or format comes first; either order works.  The output
 | 
						|
specifications <SAMP>`4xw'</SAMP> and <SAMP>`4wx'</SAMP> mean exactly the same thing.
 | 
						|
(However, the count <VAR>n</VAR> must come first; <SAMP>`wx4'</SAMP> does not work.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
Even though the unit size <VAR>u</VAR> is ignored for the formats <SAMP>`s'</SAMP>
 | 
						|
and <SAMP>`i'</SAMP>, you might still want to use a count <VAR>n</VAR>; for example,
 | 
						|
<SAMP>`3i'</SAMP> specifies that you want to see three machine instructions,
 | 
						|
including any operands.  For convenience, especially when used with
 | 
						|
the <CODE>display</CODE> command, the <SAMP>`i'</SAMP> format also prints branch delay
 | 
						|
slot instructions, if any, beyond the count specified, which immediately
 | 
						|
follow the last instruction that is within the count.  The command
 | 
						|
<CODE>disassemble</CODE> gives an alternative way of inspecting machine
 | 
						|
instructions; see <A HREF="gdb_8.html#SEC58">Source and Machine Code</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
All the defaults for the arguments to <CODE>x</CODE> are designed to make it
 | 
						|
easy to continue scanning memory with minimal specifications each time
 | 
						|
you use <CODE>x</CODE>.  For example, after you have inspected three machine
 | 
						|
instructions with <SAMP>`x/3i <VAR>addr</VAR>'</SAMP>, you can inspect the next seven
 | 
						|
with just <SAMP>`x/7'</SAMP>.  If you use <KBD>RET</KBD> to repeat the <CODE>x</CODE> command,
 | 
						|
the repeat count <VAR>n</VAR> is used again; the other arguments default as
 | 
						|
for successive uses of <CODE>x</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX399"></A>
 | 
						|
The addresses and contents printed by the <CODE>x</CODE> command are not saved
 | 
						|
in the value history because there is often too much of them and they
 | 
						|
would get in the way.  Instead, GDB makes these values available for
 | 
						|
subsequent use in expressions as values of the convenience variables
 | 
						|
<CODE>$_</CODE> and <CODE>$__</CODE>.  After an <CODE>x</CODE> command, the last address
 | 
						|
examined is available for use in expressions in the convenience variable
 | 
						|
<CODE>$_</CODE>.  The contents of that address, as examined, are available in
 | 
						|
the convenience variable <CODE>$__</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If the <CODE>x</CODE> command has a repeat count, the address and contents saved
 | 
						|
are from the last memory unit printed; this is not the same as the last
 | 
						|
address printed if several units were printed on the last line of output.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX400"></A>
 | 
						|
<A NAME="IDX401"></A>
 | 
						|
When you are debugging a program running on a remote target machine
 | 
						|
(see section <A HREF="gdb_18.html#SEC162">17. Debugging Remote Programs</A>), you may wish to verify the program's image in the
 | 
						|
remote machine's memory against the executable file you downloaded to
 | 
						|
the target.  The <CODE>compare-sections</CODE> command is provided for such
 | 
						|
situations.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX402"></A>
 | 
						|
<DT><CODE>compare-sections [<VAR>section-name</VAR>]</CODE>
 | 
						|
<DD>Compare the data of a loadable section <VAR>section-name</VAR> in the
 | 
						|
executable file of the program being debugged with the same section in
 | 
						|
the remote machine's memory, and report any mismatches.  With no
 | 
						|
arguments, compares all loadable sections.  This command's
 | 
						|
availability depends on the target's support for the <CODE>"qCRC"</CODE>
 | 
						|
remote request.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Auto Display"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC65"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC64"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC66"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC66"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.6 Automatic Display </H2>
 | 
						|
<!--docid::SEC65::-->
 | 
						|
<P>
 | 
						|
 | 
						|
If you find that you want to print the value of an expression frequently
 | 
						|
(to see how it changes), you might want to add it to the <EM>automatic
 | 
						|
display list</EM> so that GDB prints its value each time your program stops.
 | 
						|
Each expression added to the list is given a number to identify it;
 | 
						|
to remove an expression from the list, you specify that number.
 | 
						|
The automatic display looks like this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>2: foo = 38
 | 
						|
3: bar[5] = (struct hack *) 0x3804
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
This display shows item numbers, expressions and their current values.  As with
 | 
						|
displays you request manually using <CODE>x</CODE> or <CODE>print</CODE>, you can
 | 
						|
specify the output format you prefer; in fact, <CODE>display</CODE> decides
 | 
						|
whether to use <CODE>print</CODE> or <CODE>x</CODE> depending your format
 | 
						|
specification--it uses <CODE>x</CODE> if you specify either the <SAMP>`i'</SAMP>
 | 
						|
or <SAMP>`s'</SAMP> format, or a unit size; otherwise it uses <CODE>print</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX403"></A>
 | 
						|
<DT><CODE>display <VAR>expr</VAR></CODE>
 | 
						|
<DD>Add the expression <VAR>expr</VAR> to the list of expressions to display
 | 
						|
each time your program stops.  See section <A HREF="gdb_9.html#SEC60">Expressions</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<CODE>display</CODE> does not repeat if you press <KBD>RET</KBD> again after using it.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>display/<VAR>fmt</VAR> <VAR>expr</VAR></CODE>
 | 
						|
<DD>For <VAR>fmt</VAR> specifying only a display format and not a size or
 | 
						|
count, add the expression <VAR>expr</VAR> to the auto-display list but
 | 
						|
arrange to display it each time in the specified format <VAR>fmt</VAR>.
 | 
						|
See section <A HREF="gdb_9.html#SEC63">Output Formats</A>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>display/<VAR>fmt</VAR> <VAR>addr</VAR></CODE>
 | 
						|
<DD>For <VAR>fmt</VAR> <SAMP>`i'</SAMP> or <SAMP>`s'</SAMP>, or including a unit-size or a
 | 
						|
number of units, add the expression <VAR>addr</VAR> as a memory address to
 | 
						|
be examined each time your program stops.  Examining means in effect
 | 
						|
doing <SAMP>`x/<VAR>fmt</VAR> <VAR>addr</VAR>'</SAMP>.  See section <A HREF="gdb_9.html#SEC64">Examining Memory</A>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
For example, <SAMP>`display/i $pc'</SAMP> can be helpful, to see the machine
 | 
						|
instruction about to be executed each time execution stops (<SAMP>`$pc'</SAMP>
 | 
						|
is a common name for the program counter; see section <A HREF="gdb_9.html#SEC69">Registers</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX404"></A>
 | 
						|
<A NAME="IDX405"></A>
 | 
						|
<DT><CODE>undisplay <VAR>dnums</VAR><small>...</small></CODE>
 | 
						|
<DD><DT><CODE>delete display <VAR>dnums</VAR><small>...</small></CODE>
 | 
						|
<DD>Remove item numbers <VAR>dnums</VAR> from the list of expressions to display.
 | 
						|
<P>
 | 
						|
 | 
						|
<CODE>undisplay</CODE> does not repeat if you press <KBD>RET</KBD> after using it.
 | 
						|
(Otherwise you would just get the error <SAMP>`No display number <small>...</small>'</SAMP>.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX406"></A>
 | 
						|
<DT><CODE>disable display <VAR>dnums</VAR><small>...</small></CODE>
 | 
						|
<DD>Disable the display of item numbers <VAR>dnums</VAR>.  A disabled display
 | 
						|
item is not printed automatically, but is not forgotten.  It may be
 | 
						|
enabled again later.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX407"></A>
 | 
						|
<DT><CODE>enable display <VAR>dnums</VAR><small>...</small></CODE>
 | 
						|
<DD>Enable display of item numbers <VAR>dnums</VAR>.  It becomes effective once
 | 
						|
again in auto display of its expression, until you specify otherwise.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>display</CODE>
 | 
						|
<DD>Display the current values of the expressions on the list, just as is
 | 
						|
done when your program stops.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX408"></A>
 | 
						|
<DT><CODE>info display</CODE>
 | 
						|
<DD>Print the list of expressions previously set up to display
 | 
						|
automatically, each one with its item number, but without showing the
 | 
						|
values.  This includes disabled expressions, which are marked as such.
 | 
						|
It also includes expressions which would not be displayed right now
 | 
						|
because they refer to automatic variables not currently available.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX409"></A>
 | 
						|
If a display expression refers to local variables, then it does not make
 | 
						|
sense outside the lexical context for which it was set up.  Such an
 | 
						|
expression is disabled when execution enters a context where one of its
 | 
						|
variables is not defined.  For example, if you give the command
 | 
						|
<CODE>display last_char</CODE> while inside a function with an argument
 | 
						|
<CODE>last_char</CODE>, GDB displays this argument while your program
 | 
						|
continues to stop inside that function.  When it stops elsewhere--where
 | 
						|
there is no variable <CODE>last_char</CODE>---the display is disabled
 | 
						|
automatically.  The next time your program stops where <CODE>last_char</CODE>
 | 
						|
is meaningful, you can enable the display expression once again.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Print Settings"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC66"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC65"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC67"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC67"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.7 Print Settings </H2>
 | 
						|
<!--docid::SEC66::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX410"></A>
 | 
						|
<A NAME="IDX411"></A>
 | 
						|
GDB provides the following ways to control how arrays, structures,
 | 
						|
and symbols are printed.
 | 
						|
</P><P>
 | 
						|
 | 
						|
These settings are useful for debugging programs in any language:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX412"></A>
 | 
						|
<DT><CODE>set print address</CODE>
 | 
						|
<DD><DT><CODE>set print address on</CODE>
 | 
						|
<DD><A NAME="IDX413"></A>
 | 
						|
GDB prints memory addresses showing the location of stack
 | 
						|
traces, structure values, pointer values, breakpoints, and so forth,
 | 
						|
even when it also displays the contents of those addresses.  The default
 | 
						|
is <CODE>on</CODE>.  For example, this is what a stack frame display looks like with
 | 
						|
<CODE>set print address on</CODE>:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) f
 | 
						|
#0  set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
 | 
						|
    at input.c:530
 | 
						|
530         if (lquote != def_lquote)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<DT><CODE>set print address off</CODE>
 | 
						|
<DD>Do not print addresses when displaying their contents.  For example,
 | 
						|
this is the same stack frame displayed with <CODE>set print address off</CODE>:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set print addr off
 | 
						|
(gdb) f
 | 
						|
#0  set_quotes (lq="<<", rq=">>") at input.c:530
 | 
						|
530         if (lquote != def_lquote)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
You can use <SAMP>`set print address off'</SAMP> to eliminate all machine
 | 
						|
dependent displays from the GDB interface.  For example, with
 | 
						|
<CODE>print address off</CODE>, you should get the same text for backtraces on
 | 
						|
all machines--whether or not they involve pointer arguments.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX414"></A>
 | 
						|
<DT><CODE>show print address</CODE>
 | 
						|
<DD>Show whether or not addresses are to be printed.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
When GDB prints a symbolic address, it normally prints the
 | 
						|
closest earlier symbol plus an offset.  If that symbol does not uniquely
 | 
						|
identify the address (for example, it is a name whose scope is a single
 | 
						|
source file), you may need to clarify.  One way to do this is with
 | 
						|
<CODE>info line</CODE>, for example <SAMP>`info line *0x4537'</SAMP>.  Alternately,
 | 
						|
you can set GDB to print the source file and line number when
 | 
						|
it prints a symbolic address:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set print symbol-filename on</CODE>
 | 
						|
<DD><A NAME="IDX415"></A>
 | 
						|
<A NAME="IDX416"></A>
 | 
						|
Tell GDB to print the source file name and line number of a
 | 
						|
symbol in the symbolic form of an address.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print symbol-filename off</CODE>
 | 
						|
<DD>Do not print source file name and line number of a symbol.  This is the
 | 
						|
default.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print symbol-filename</CODE>
 | 
						|
<DD>Show whether or not GDB will print the source file name and
 | 
						|
line number of a symbol in the symbolic form of an address.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Another situation where it is helpful to show symbol filenames and line
 | 
						|
numbers is when disassembling code; GDB shows you the line
 | 
						|
number and source file that corresponds to each instruction.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Also, you may wish to see the symbolic form only if the address being
 | 
						|
printed is reasonably close to the closest earlier symbol:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set print max-symbolic-offset <VAR>max-offset</VAR></CODE>
 | 
						|
<DD><A NAME="IDX417"></A>
 | 
						|
Tell GDB to only display the symbolic form of an address if the
 | 
						|
offset between the closest earlier symbol and the address is less than
 | 
						|
<VAR>max-offset</VAR>.  The default is 0, which tells GDB
 | 
						|
to always print the symbolic form of an address if any symbol precedes it.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print max-symbolic-offset</CODE>
 | 
						|
<DD>Ask how large the maximum offset is that GDB prints in a
 | 
						|
symbolic address.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX418"></A>
 | 
						|
<A NAME="IDX419"></A>
 | 
						|
If you have a pointer and you are not sure where it points, try
 | 
						|
<SAMP>`set print symbol-filename on'</SAMP>.  Then you can determine the name
 | 
						|
and source file location of the variable where it points, using
 | 
						|
<SAMP>`p/a <VAR>pointer</VAR>'</SAMP>.  This interprets the address in symbolic form.
 | 
						|
For example, here GDB shows that a variable <CODE>ptt</CODE> points
 | 
						|
at another variable <CODE>t</CODE>, defined in <TT>`hi2.c'</TT>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set print symbol-filename on
 | 
						|
(gdb) p/a ptt
 | 
						|
$4 = 0xe008 <t in hi2.c>
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE>
 | 
						|
<EM>Warning:</EM> For pointers that point to a local variable, <SAMP>`p/a'</SAMP>
 | 
						|
does not show the symbol name and filename of the referent, even with
 | 
						|
the appropriate <CODE>set print</CODE> options turned on.
 | 
						|
</BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
Other settings control how different kinds of objects are printed:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set print array</CODE>
 | 
						|
<DD><DT><CODE>set print array on</CODE>
 | 
						|
<DD><A NAME="IDX420"></A>
 | 
						|
Pretty print arrays.  This format is more convenient to read,
 | 
						|
but uses more space.  The default is off.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print array off</CODE>
 | 
						|
<DD>Return to compressed format for arrays.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print array</CODE>
 | 
						|
<DD>Show whether compressed or pretty format is selected for displaying
 | 
						|
arrays.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX421"></A>
 | 
						|
<DT><CODE>set print array-indexes</CODE>
 | 
						|
<DD><DT><CODE>set print array-indexes on</CODE>
 | 
						|
<DD>Print the index of each element when displaying arrays.  May be more
 | 
						|
convenient to locate a given element in the array or quickly find the
 | 
						|
index of a given element in that printed array.  The default is off.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print array-indexes off</CODE>
 | 
						|
<DD>Stop printing element indexes when displaying arrays.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print array-indexes</CODE>
 | 
						|
<DD>Show whether the index of each element is printed when displaying
 | 
						|
arrays.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print elements <VAR>number-of-elements</VAR></CODE>
 | 
						|
<DD><A NAME="IDX422"></A>
 | 
						|
<A NAME="IDX423"></A>
 | 
						|
Set a limit on how many elements of an array GDB will print.
 | 
						|
If GDB is printing a large array, it stops printing after it has
 | 
						|
printed the number of elements set by the <CODE>set print elements</CODE> command.
 | 
						|
This limit also applies to the display of strings.
 | 
						|
When GDB starts, this limit is set to 200.
 | 
						|
Setting  <VAR>number-of-elements</VAR> to zero means that the printing is unlimited.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print elements</CODE>
 | 
						|
<DD>Display the number of elements of a large array that GDB will print.
 | 
						|
If the number is 0, then the printing is unlimited.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print frame-arguments <VAR>value</VAR></CODE>
 | 
						|
<DD><A NAME="IDX424"></A>
 | 
						|
<A NAME="IDX425"></A>
 | 
						|
<A NAME="IDX426"></A>
 | 
						|
<A NAME="IDX427"></A>
 | 
						|
This command allows to control how the values of arguments are printed
 | 
						|
when the debugger prints a frame (see section <A HREF="gdb_7.html#SEC47">6.1 Stack Frames</A>).  The possible
 | 
						|
values are:
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>all</CODE>
 | 
						|
<DD>The values of all arguments are printed.  This is the default.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>scalars</CODE>
 | 
						|
<DD>Print the value of an argument only if it is a scalar.  The value of more
 | 
						|
complex arguments such as arrays, structures, unions, etc, is replaced
 | 
						|
by <CODE><small>...</small></CODE>.  Here is an example where only scalar arguments are shown:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#1  0x08048361 in call_me (i=3, s=<small>...</small>, ss=0xbf8d508c, u=<small>...</small>, e=green)
 | 
						|
  at frame-args.c:23
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<DT><CODE>none</CODE>
 | 
						|
<DD>None of the argument values are printed.  Instead, the value of each argument
 | 
						|
is replaced by <CODE><small>...</small></CODE>.  In this case, the example above now becomes:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#1  0x08048361 in call_me (i=<small>...</small>, s=<small>...</small>, ss=<small>...</small>, u=<small>...</small>, e=<small>...</small>)
 | 
						|
  at frame-args.c:23
 | 
						|
</FONT></pre></td></tr></table></DL>
 | 
						|
<P>
 | 
						|
 | 
						|
By default, all argument values are always printed.  But this command
 | 
						|
can be useful in several cases.  For instance, it can be used to reduce
 | 
						|
the amount of information printed in each frame, making the backtrace
 | 
						|
more readable.  Also, this command can be used to improve performance
 | 
						|
when displaying Ada frames, because the computation of large arguments
 | 
						|
can sometimes be CPU-intensive, especiallly in large applications.
 | 
						|
Setting <CODE>print frame-arguments</CODE> to <CODE>scalars</CODE> or <CODE>none</CODE>
 | 
						|
avoids this computation, thus speeding up the display of each Ada frame.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>show print frame-arguments</CODE>
 | 
						|
<DD>Show how the value of arguments should be displayed when printing a frame.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print repeats</CODE>
 | 
						|
<DD><A NAME="IDX428"></A>
 | 
						|
Set the threshold for suppressing display of repeated array
 | 
						|
elements.  When the number of consecutive identical elements of an
 | 
						|
array exceeds the threshold, GDB prints the string
 | 
						|
<CODE>"<repeats <VAR>n</VAR> times>"</CODE>, where <VAR>n</VAR> is the number of
 | 
						|
identical repetitions, instead of displaying the identical elements
 | 
						|
themselves.  Setting the threshold to zero will cause all elements to
 | 
						|
be individually printed.  The default threshold is 10.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print repeats</CODE>
 | 
						|
<DD>Display the current threshold for printing repeated identical
 | 
						|
elements.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print null-stop</CODE>
 | 
						|
<DD><A NAME="IDX429"></A>
 | 
						|
Cause GDB to stop printing the characters of an array when the first
 | 
						|
NULL is encountered.  This is useful when large arrays actually
 | 
						|
contain only short strings.
 | 
						|
The default is off.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print null-stop</CODE>
 | 
						|
<DD>Show whether GDB stops printing an array on the first
 | 
						|
NULL character.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print pretty on</CODE>
 | 
						|
<DD><A NAME="IDX430"></A>
 | 
						|
<A NAME="IDX431"></A>
 | 
						|
Cause GDB to print structures in an indented format with one member
 | 
						|
per line, like this:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$1 = {
 | 
						|
  next = 0x0,
 | 
						|
  flags = {
 | 
						|
    sweet = 1,
 | 
						|
    sour = 1
 | 
						|
  },
 | 
						|
  meat = 0x54 "Pork"
 | 
						|
}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<DT><CODE>set print pretty off</CODE>
 | 
						|
<DD>Cause GDB to print structures in a compact format, like this:
 | 
						|
<P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
 | 
						|
meat = 0x54 "Pork"}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
This is the default format.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>show print pretty</CODE>
 | 
						|
<DD>Show which format GDB is using to print structures.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print sevenbit-strings on</CODE>
 | 
						|
<DD><A NAME="IDX432"></A>
 | 
						|
<A NAME="IDX433"></A>
 | 
						|
Print using only seven-bit characters; if this option is set,
 | 
						|
GDB displays any eight-bit characters (in strings or
 | 
						|
character values) using the notation <CODE>\</CODE><VAR>nnn</VAR>.  This setting is
 | 
						|
best if you are working in English (ASCII) and you use the
 | 
						|
high-order bit of characters as a marker or "meta" bit.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print sevenbit-strings off</CODE>
 | 
						|
<DD>Print full eight-bit characters.  This allows the use of more
 | 
						|
international character sets, and is the default.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print sevenbit-strings</CODE>
 | 
						|
<DD>Show whether or not GDB is printing only seven-bit characters.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print union on</CODE>
 | 
						|
<DD><A NAME="IDX434"></A>
 | 
						|
Tell GDB to print unions which are contained in structures
 | 
						|
and other unions.  This is the default setting.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print union off</CODE>
 | 
						|
<DD>Tell GDB not to print unions which are contained in
 | 
						|
structures and other unions.  GDB will print <CODE>"{...}"</CODE>
 | 
						|
instead.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print union</CODE>
 | 
						|
<DD>Ask GDB whether or not it will print unions which are contained in
 | 
						|
structures and other unions.
 | 
						|
<P>
 | 
						|
 | 
						|
For example, given the declarations
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>typedef enum {Tree, Bug} Species;
 | 
						|
typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
 | 
						|
typedef enum {Caterpillar, Cocoon, Butterfly}
 | 
						|
              Bug_forms;
 | 
						|
 | 
						|
struct thing {
 | 
						|
  Species it;
 | 
						|
  union {
 | 
						|
    Tree_forms tree;
 | 
						|
    Bug_forms bug;
 | 
						|
  } form;
 | 
						|
};
 | 
						|
 | 
						|
struct thing foo = {Tree, {Acorn}};
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
with <CODE>set print union on</CODE> in effect <SAMP>`p foo'</SAMP> would print
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
and with <CODE>set print union off</CODE> in effect it would print
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$1 = {it = Tree, form = {...}}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<CODE>set print union</CODE> affects programs written in C-like languages
 | 
						|
and in Pascal.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
These settings are of interest when debugging C<TT>++</TT> programs:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX435"></A>
 | 
						|
<DT><CODE>set print demangle</CODE>
 | 
						|
<DD><DT><CODE>set print demangle on</CODE>
 | 
						|
<DD>Print C<TT>++</TT> names in their source form rather than in the encoded
 | 
						|
("mangled") form passed to the assembler and linker for type-safe
 | 
						|
linkage.  The default is on.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print demangle</CODE>
 | 
						|
<DD>Show whether C<TT>++</TT> names are printed in mangled or demangled form.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print asm-demangle</CODE>
 | 
						|
<DD><DT><CODE>set print asm-demangle on</CODE>
 | 
						|
<DD>Print C<TT>++</TT> names in their source form rather than their mangled form, even
 | 
						|
in assembler code printouts such as instruction disassemblies.
 | 
						|
The default is off.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print asm-demangle</CODE>
 | 
						|
<DD>Show whether C<TT>++</TT> names in assembly listings are printed in mangled
 | 
						|
or demangled form.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX436"></A>
 | 
						|
<A NAME="IDX437"></A>
 | 
						|
<A NAME="IDX438"></A>
 | 
						|
<DT><CODE>set demangle-style <VAR>style</VAR></CODE>
 | 
						|
<DD>Choose among several encoding schemes used by different compilers to
 | 
						|
represent C<TT>++</TT> names.  The choices for <VAR>style</VAR> are currently:
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>auto</CODE>
 | 
						|
<DD>Allow GDB to choose a decoding style by inspecting your program.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>gnu</CODE>
 | 
						|
<DD>Decode based on the GNU C<TT>++</TT> compiler (<CODE>g++</CODE>) encoding algorithm.
 | 
						|
This is the default.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>hp</CODE>
 | 
						|
<DD>Decode based on the HP ANSI C<TT>++</TT> (<CODE>aCC</CODE>) encoding algorithm.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>lucid</CODE>
 | 
						|
<DD>Decode based on the Lucid C<TT>++</TT> compiler (<CODE>lcc</CODE>) encoding algorithm.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>arm</CODE>
 | 
						|
<DD>Decode using the algorithm in the <CITE>C<TT>++</TT> Annotated Reference Manual</CITE>.
 | 
						|
<STRONG>Warning:</STRONG> this setting alone is not sufficient to allow
 | 
						|
debugging <CODE>cfront</CODE>-generated executables.  GDB would
 | 
						|
require further enhancement to permit that.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
If you omit <VAR>style</VAR>, you will see a list of possible formats.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show demangle-style</CODE>
 | 
						|
<DD>Display the encoding style currently in use for decoding C<TT>++</TT> symbols.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print object</CODE>
 | 
						|
<DD><DT><CODE>set print object on</CODE>
 | 
						|
<DD><A NAME="IDX439"></A>
 | 
						|
<A NAME="IDX440"></A>
 | 
						|
When displaying a pointer to an object, identify the <EM>actual</EM>
 | 
						|
(derived) type of the object rather than the <EM>declared</EM> type, using
 | 
						|
the virtual function table.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print object off</CODE>
 | 
						|
<DD>Display only the declared type of objects, without reference to the
 | 
						|
virtual function table.  This is the default setting.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print object</CODE>
 | 
						|
<DD>Show whether actual, or declared, object types are displayed.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print static-members</CODE>
 | 
						|
<DD><DT><CODE>set print static-members on</CODE>
 | 
						|
<DD><A NAME="IDX441"></A>
 | 
						|
Print static members when displaying a C<TT>++</TT> object.  The default is on.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print static-members off</CODE>
 | 
						|
<DD>Do not print static members when displaying a C<TT>++</TT> object.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print static-members</CODE>
 | 
						|
<DD>Show whether C<TT>++</TT> static members are printed or not.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print pascal_static-members</CODE>
 | 
						|
<DD><DT><CODE>set print pascal_static-members on</CODE>
 | 
						|
<DD><A NAME="IDX442"></A>
 | 
						|
<A NAME="IDX443"></A>
 | 
						|
Print static members when displaying a Pascal object.  The default is on.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print pascal_static-members off</CODE>
 | 
						|
<DD>Do not print static members when displaying a Pascal object.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print pascal_static-members</CODE>
 | 
						|
<DD>Show whether Pascal static members are printed or not.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print vtbl</CODE>
 | 
						|
<DD><DT><CODE>set print vtbl on</CODE>
 | 
						|
<DD><A NAME="IDX444"></A>
 | 
						|
<A NAME="IDX445"></A>
 | 
						|
<A NAME="IDX446"></A>
 | 
						|
Pretty print C<TT>++</TT> virtual function tables.  The default is off.
 | 
						|
(The <CODE>vtbl</CODE> commands do not work on programs compiled with the HP
 | 
						|
ANSI C<TT>++</TT> compiler (<CODE>aCC</CODE>).)
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>set print vtbl off</CODE>
 | 
						|
<DD>Do not pretty print C<TT>++</TT> virtual function tables.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show print vtbl</CODE>
 | 
						|
<DD>Show whether C<TT>++</TT> virtual function tables are pretty printed, or not.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Value History"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC67"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC66"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC68"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC68"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.8 Value History </H2>
 | 
						|
<!--docid::SEC67::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX447"></A>
 | 
						|
<A NAME="IDX448"></A>
 | 
						|
Values printed by the <CODE>print</CODE> command are saved in the GDB
 | 
						|
<EM>value history</EM>.  This allows you to refer to them in other expressions.
 | 
						|
Values are kept until the symbol table is re-read or discarded
 | 
						|
(for example with the <CODE>file</CODE> or <CODE>symbol-file</CODE> commands).
 | 
						|
When the symbol table changes, the value history is discarded,
 | 
						|
since the values may contain pointers back to the types defined in the
 | 
						|
symbol table.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX449"></A>
 | 
						|
<A NAME="IDX450"></A>
 | 
						|
<A NAME="IDX451"></A>
 | 
						|
The values printed are given <EM>history numbers</EM> by which you can
 | 
						|
refer to them.  These are successive integers starting with one.
 | 
						|
<CODE>print</CODE> shows you the history number assigned to a value by
 | 
						|
printing <SAMP>`$<VAR>num</VAR> = '</SAMP> before the value; here <VAR>num</VAR> is the
 | 
						|
history number.
 | 
						|
</P><P>
 | 
						|
 | 
						|
To refer to any previous value, use <SAMP>`$'</SAMP> followed by the value's
 | 
						|
history number.  The way <CODE>print</CODE> labels its output is designed to
 | 
						|
remind you of this.  Just <CODE>$</CODE> refers to the most recent value in
 | 
						|
the history, and <CODE>$$</CODE> refers to the value before that.
 | 
						|
<CODE>$$<VAR>n</VAR></CODE> refers to the <VAR>n</VAR>th value from the end; <CODE>$$2</CODE>
 | 
						|
is the value just prior to <CODE>$$</CODE>, <CODE>$$1</CODE> is equivalent to
 | 
						|
<CODE>$$</CODE>, and <CODE>$$0</CODE> is equivalent to <CODE>$</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example, suppose you have just printed a pointer to a structure and
 | 
						|
want to see the contents of the structure.  It suffices to type
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>p *$
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If you have a chain of structures where the component <CODE>next</CODE> points
 | 
						|
to the next one, you can print the contents of the next one with this:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>p *$.next
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
You can print successive links in the chain by repeating this
 | 
						|
command--which you can do by just typing <KBD>RET</KBD>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Note that the history records values, not expressions.  If the value of
 | 
						|
<CODE>x</CODE> is 4 and you type these commands:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>print x
 | 
						|
set x=5
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
then the value recorded in the value history by the <CODE>print</CODE> command
 | 
						|
remains 4 even though the value of <CODE>x</CODE> has changed.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX452"></A>
 | 
						|
<DT><CODE>show values</CODE>
 | 
						|
<DD>Print the last ten values in the value history, with their item numbers.
 | 
						|
This is like <SAMP>`p $$9'</SAMP> repeated ten times, except that <CODE>show
 | 
						|
values</CODE> does not change the history.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show values <VAR>n</VAR></CODE>
 | 
						|
<DD>Print ten history values centered on history item number <VAR>n</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show values +</CODE>
 | 
						|
<DD>Print ten history values just after the values last printed.  If no more
 | 
						|
values are available, <CODE>show values +</CODE> produces no display.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Pressing <KBD>RET</KBD> to repeat <CODE>show values <VAR>n</VAR></CODE> has exactly the
 | 
						|
same effect as <SAMP>`show values +'</SAMP>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Convenience Vars"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC68"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC67"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC69"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.9 Convenience Variables </H2>
 | 
						|
<!--docid::SEC68::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX453"></A>
 | 
						|
<A NAME="IDX454"></A>
 | 
						|
GDB provides <EM>convenience variables</EM> that you can use within
 | 
						|
GDB to hold on to a value and refer to it later.  These variables
 | 
						|
exist entirely within GDB; they are not part of your program, and
 | 
						|
setting a convenience variable has no direct effect on further execution
 | 
						|
of your program.  That is why you can use them freely.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Convenience variables are prefixed with <SAMP>`$'</SAMP>.  Any name preceded by
 | 
						|
<SAMP>`$'</SAMP> can be used for a convenience variable, unless it is one of
 | 
						|
the predefined machine-specific register names (see section <A HREF="gdb_9.html#SEC69">Registers</A>).
 | 
						|
(Value history references, in contrast, are <EM>numbers</EM> preceded
 | 
						|
by <SAMP>`$'</SAMP>.  See section <A HREF="gdb_9.html#SEC67">Value History</A>.)
 | 
						|
</P><P>
 | 
						|
 | 
						|
You can save a value in a convenience variable with an assignment
 | 
						|
expression, just as you would set a variable in your program.
 | 
						|
For example:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set $foo = *object_ptr
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
would save in <CODE>$foo</CODE> the value contained in the object pointed to by
 | 
						|
<CODE>object_ptr</CODE>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Using a convenience variable for the first time creates it, but its
 | 
						|
value is <CODE>void</CODE> until you assign a new value.  You can alter the
 | 
						|
value with another assignment at any time.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Convenience variables have no fixed types.  You can assign a convenience
 | 
						|
variable any type of value, including structures and arrays, even if
 | 
						|
that variable already has a value of a different type.  The convenience
 | 
						|
variable, when used as an expression, has the type of its current value.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX455"></A>
 | 
						|
<A NAME="IDX456"></A>
 | 
						|
<DT><CODE>show convenience</CODE>
 | 
						|
<DD>Print a list of convenience variables used so far, and their values.
 | 
						|
Abbreviated <CODE>show conv</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX457"></A>
 | 
						|
<A NAME="IDX458"></A>
 | 
						|
<DT><CODE>init-if-undefined $<VAR>variable</VAR> = <VAR>expression</VAR></CODE>
 | 
						|
<DD>Set a convenience variable if it has not already been set.  This is useful
 | 
						|
for user-defined commands that keep some state.  It is similar, in concept,
 | 
						|
to using local static variables with initializers in C (except that
 | 
						|
convenience variables are global).  It can also be used to allow users to
 | 
						|
override default values used in a command script.
 | 
						|
<P>
 | 
						|
 | 
						|
If the variable is already defined then the expression is not evaluated so
 | 
						|
any side-effects do not occur.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
One of the ways to use a convenience variable is as a counter to be
 | 
						|
incremented or a pointer to be advanced.  For example, to print
 | 
						|
a field from successive elements of an array of structures:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set $i = 0
 | 
						|
print bar[$i++]->contents
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Repeat that command by typing <KBD>RET</KBD>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Some convenience variables are created automatically by GDB and given
 | 
						|
values likely to be useful.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX459"></A>
 | 
						|
<DT><CODE>$_</CODE>
 | 
						|
<DD>The variable <CODE>$_</CODE> is automatically set by the <CODE>x</CODE> command to
 | 
						|
the last address examined (see section <A HREF="gdb_9.html#SEC64">Examining Memory</A>).  Other
 | 
						|
commands which provide a default address for <CODE>x</CODE> to examine also
 | 
						|
set <CODE>$_</CODE> to that address; these commands include <CODE>info line</CODE>
 | 
						|
and <CODE>info breakpoint</CODE>.  The type of <CODE>$_</CODE> is <CODE>void *</CODE>
 | 
						|
except when set by the <CODE>x</CODE> command, in which case it is a pointer
 | 
						|
to the type of <CODE>$__</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX460"></A>
 | 
						|
<DT><CODE>$__</CODE>
 | 
						|
<DD>The variable <CODE>$__</CODE> is automatically set by the <CODE>x</CODE> command
 | 
						|
to the value found in the last address examined.  Its type is chosen
 | 
						|
to match the format in which the data was printed.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>$_exitcode</CODE>
 | 
						|
<DD><A NAME="IDX461"></A>
 | 
						|
The variable <CODE>$_exitcode</CODE> is automatically set to the exit code when
 | 
						|
the program being debugged terminates.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
On HP-UX systems, if you refer to a function or variable name that
 | 
						|
begins with a dollar sign, GDB searches for a user or system
 | 
						|
name first, before it searches for a convenience variable.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Registers"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC69"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC68"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC70"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.10 Registers </H2>
 | 
						|
<!--docid::SEC69::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX462"></A>
 | 
						|
You can refer to machine register contents, in expressions, as variables
 | 
						|
with names starting with <SAMP>`$'</SAMP>.  The names of registers are different
 | 
						|
for each machine; use <CODE>info registers</CODE> to see the names used on
 | 
						|
your machine.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX463"></A>
 | 
						|
<DT><CODE>info registers</CODE>
 | 
						|
<DD>Print the names and values of all registers except floating-point
 | 
						|
and vector registers (in the selected stack frame).
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX464"></A>
 | 
						|
<A NAME="IDX465"></A>
 | 
						|
<DT><CODE>info all-registers</CODE>
 | 
						|
<DD>Print the names and values of all registers, including floating-point
 | 
						|
and vector registers (in the selected stack frame).
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>info registers <VAR>regname</VAR> <small>...</small></CODE>
 | 
						|
<DD>Print the <EM>relativized</EM> value of each specified register <VAR>regname</VAR>.
 | 
						|
As discussed in detail below, register values are normally relative to
 | 
						|
the selected stack frame.  <VAR>regname</VAR> may be any register name valid on
 | 
						|
the machine you are using, with or without the initial <SAMP>`$'</SAMP>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX466"></A>
 | 
						|
<A NAME="IDX467"></A>
 | 
						|
<A NAME="IDX468"></A>
 | 
						|
<A NAME="IDX469"></A>
 | 
						|
<A NAME="IDX470"></A>
 | 
						|
GDB has four "standard" register names that are available (in
 | 
						|
expressions) on most machines--whenever they do not conflict with an
 | 
						|
architecture's canonical mnemonics for registers.  The register names
 | 
						|
<CODE>$pc</CODE> and <CODE>$sp</CODE> are used for the program counter register and
 | 
						|
the stack pointer.  <CODE>$fp</CODE> is used for a register that contains a
 | 
						|
pointer to the current stack frame, and <CODE>$ps</CODE> is used for a
 | 
						|
register that contains the processor status.  For example,
 | 
						|
you could print the program counter in hex with
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>p/x $pc
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
or print the instruction to be executed next with
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>x/i $pc
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
or add four to the stack pointer<A NAME="DOCF6" HREF="gdb_fot.html#FOOT6">(6)</A> with
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>set $sp += 4
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Whenever possible, these four standard register names are available on
 | 
						|
your machine even though the machine has different canonical mnemonics,
 | 
						|
so long as there is no conflict.  The <CODE>info registers</CODE> command
 | 
						|
shows the canonical names.  For example, on the SPARC, <CODE>info
 | 
						|
registers</CODE> displays the processor status register as <CODE>$psr</CODE> but you
 | 
						|
can also refer to it as <CODE>$ps</CODE>; and on x86-based machines <CODE>$ps</CODE>
 | 
						|
is an alias for the EFLAGS register.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB always considers the contents of an ordinary register as an
 | 
						|
integer when the register is examined in this way.  Some machines have
 | 
						|
special registers which can hold nothing but floating point; these
 | 
						|
registers are considered to have floating point values.  There is no way
 | 
						|
to refer to the contents of an ordinary register as floating point value
 | 
						|
(although you can <EM>print</EM> it as a floating point value with
 | 
						|
<SAMP>`print/f $<VAR>regname</VAR>'</SAMP>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
Some registers have distinct "raw" and "virtual" data formats.  This
 | 
						|
means that the data format in which the register contents are saved by
 | 
						|
the operating system is not the same one that your program normally
 | 
						|
sees.  For example, the registers of the 68881 floating point
 | 
						|
coprocessor are always saved in "extended" (raw) format, but all C
 | 
						|
programs expect to work with "double" (virtual) format.  In such
 | 
						|
cases, GDB normally works with the virtual format only (the format
 | 
						|
that makes sense for your program), but the <CODE>info registers</CODE> command
 | 
						|
prints the data in both formats.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX471"></A>
 | 
						|
<A NAME="IDX472"></A>
 | 
						|
Some machines have special registers whose contents can be interpreted
 | 
						|
in several different ways.  For example, modern x86-based machines
 | 
						|
have SSE and MMX registers that can hold several values packed
 | 
						|
together in several different formats.  GDB refers to such
 | 
						|
registers in <CODE>struct</CODE> notation:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print $xmm1
 | 
						|
$1 = {
 | 
						|
  v4_float = {0, 3.43859137e-038, 1.54142831e-044, 1.821688e-044},
 | 
						|
  v2_double = {9.92129282474342e-303, 2.7585945287983262e-313},
 | 
						|
  v16_int8 = "\000\000\000\000\3706;\001\v\000\000\000\r\000\000",
 | 
						|
  v8_int16 = {0, 0, 14072, 315, 11, 0, 13, 0},
 | 
						|
  v4_int32 = {0, 20657912, 11, 13},
 | 
						|
  v2_int64 = {88725056443645952, 55834574859},
 | 
						|
  uint128 = 0x0000000d0000000b013b36f800000000
 | 
						|
}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
To set values of such registers, you need to tell GDB which
 | 
						|
view of the register you wish to change, as if you were assigning
 | 
						|
value to a <CODE>struct</CODE> member:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> (gdb) set $xmm1.uint128 = 0x000000000000000000000000FFFFFFFF
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Normally, register values are relative to the selected stack frame
 | 
						|
(see section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>).  This means that you get the
 | 
						|
value that the register would contain if all stack frames farther in
 | 
						|
were exited and their saved registers restored.  In order to see the
 | 
						|
true contents of hardware registers, you must select the innermost
 | 
						|
frame (with <SAMP>`frame 0'</SAMP>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
However, GDB must deduce where registers are saved, from the machine
 | 
						|
code generated by your compiler.  If some registers are not saved, or if
 | 
						|
GDB is unable to locate the saved registers, the selected stack
 | 
						|
frame makes no difference.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Floating Point Hardware"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC70"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC69"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC71"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.11 Floating Point Hardware </H2>
 | 
						|
<!--docid::SEC70::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Depending on the configuration, GDB may be able to give
 | 
						|
you more information about the status of the floating point hardware.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX473"></A>
 | 
						|
<DT><CODE>info float</CODE>
 | 
						|
<DD>Display hardware-dependent information about the floating
 | 
						|
point unit.  The exact contents and layout vary depending on the
 | 
						|
floating point chip.  Currently, <SAMP>`info float'</SAMP> is supported on
 | 
						|
the ARM and x86 machines.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Vector Unit"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC71"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC70"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC72"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.12 Vector Unit </H2>
 | 
						|
<!--docid::SEC71::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Depending on the configuration, GDB may be able to give you
 | 
						|
more information about the status of the vector unit.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX474"></A>
 | 
						|
<DT><CODE>info vector</CODE>
 | 
						|
<DD>Display information about the vector unit.  The exact contents and
 | 
						|
layout vary depending on the hardware.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="OS Information"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC72"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC71"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC73"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.13 Operating System Auxiliary Information </H2>
 | 
						|
<!--docid::SEC72::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB provides interfaces to useful OS facilities that can help
 | 
						|
you debug your program.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX475"></A>
 | 
						|
<A NAME="IDX476"></A>
 | 
						|
When GDB runs on a <EM>Posix system</EM> (such as GNU or Unix
 | 
						|
machines), it interfaces with the inferior via the <CODE>ptrace</CODE>
 | 
						|
system call.  The operating system creates a special sata structure,
 | 
						|
called <CODE>struct user</CODE>, for this interface.  You can use the
 | 
						|
command <CODE>info udot</CODE> to display the contents of this data
 | 
						|
structure.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>info udot</CODE>
 | 
						|
<DD><A NAME="IDX477"></A>
 | 
						|
Display the contents of the <CODE>struct user</CODE> maintained by the OS
 | 
						|
kernel for the program being debugged.  GDB displays the
 | 
						|
contents of <CODE>struct user</CODE> as a list of hex numbers, similar to
 | 
						|
the <CODE>examine</CODE> command.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX478"></A>
 | 
						|
<A NAME="IDX479"></A>
 | 
						|
Some operating systems supply an <EM>auxiliary vector</EM> to programs at
 | 
						|
startup.  This is akin to the arguments and environment that you
 | 
						|
specify for a program, but contains a system-dependent variety of
 | 
						|
binary values that tell system libraries important details about the
 | 
						|
hardware, operating system, and process.  Each value's purpose is
 | 
						|
identified by an integer tag; the meanings are well-known but system-specific.
 | 
						|
Depending on the configuration and operating system facilities,
 | 
						|
GDB may be able to show you this information.  For remote
 | 
						|
targets, this functionality may further depend on the remote stub's
 | 
						|
support of the <SAMP>`qXfer:auxv:read'</SAMP> packet, see
 | 
						|
 <A HREF="gdb_33.html#qXfer auxiliary vector read">qXfer auxiliary vector read</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX480"></A>
 | 
						|
<DT><CODE>info auxv</CODE>
 | 
						|
<DD>Display the auxiliary vector of the inferior, which can be either a
 | 
						|
live process or a core dump file.  GDB prints each tag value
 | 
						|
numerically, and also shows names and text descriptions for recognized
 | 
						|
tags.  Some values in the vector are numbers, some bit masks, and some
 | 
						|
pointers to strings or other data.  GDB displays each value in the
 | 
						|
most appropriate form for a recognized tag, and in hexadecimal for
 | 
						|
an unrecognized tag.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Memory Region Attributes"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC73"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC72"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC74"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC79"> >> </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> 8.14 Memory Region Attributes </H2>
 | 
						|
<!--docid::SEC73::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<EM>Memory region attributes</EM> allow you to describe special handling
 | 
						|
required by regions of your target's memory.  GDB uses
 | 
						|
attributes to determine whether to allow certain types of memory
 | 
						|
accesses; whether to use specific width accesses; and whether to cache
 | 
						|
target memory.  By default the description of memory regions is
 | 
						|
fetched from the target (if the current target supports this), but the
 | 
						|
user can override the fetched regions.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Defined memory regions can be individually enabled and disabled.  When a
 | 
						|
memory region is disabled, GDB uses the default attributes when
 | 
						|
accessing memory in that region.  Similarly, if no memory regions have
 | 
						|
been defined, GDB uses the default attributes when accessing
 | 
						|
all memory.
 | 
						|
</P><P>
 | 
						|
 | 
						|
When a memory region is defined, it is given a number to identify it;
 | 
						|
to enable, disable, or remove a memory region, you specify that number.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX481"></A>
 | 
						|
<DT><CODE>mem <VAR>lower</VAR> <VAR>upper</VAR> <VAR>attributes</VAR><small>...</small></CODE>
 | 
						|
<DD>Define a memory region bounded by <VAR>lower</VAR> and <VAR>upper</VAR> with
 | 
						|
attributes <VAR>attributes</VAR><small>...</small>, and add it to the list of regions
 | 
						|
monitored by GDB.  Note that <VAR>upper</VAR> == 0 is a special
 | 
						|
case: it is treated as the target's maximum memory address.
 | 
						|
(0xffff on 16 bit targets, 0xffffffff on 32 bit targets, etc.)
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>mem auto</CODE>
 | 
						|
<DD>Discard any user changes to the memory regions and use target-supplied
 | 
						|
regions, if available, or no regions if the target does not support.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX482"></A>
 | 
						|
<DT><CODE>delete mem <VAR>nums</VAR><small>...</small></CODE>
 | 
						|
<DD>Remove memory regions <VAR>nums</VAR><small>...</small> from the list of regions
 | 
						|
monitored by GDB.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX483"></A>
 | 
						|
<DT><CODE>disable mem <VAR>nums</VAR><small>...</small></CODE>
 | 
						|
<DD>Disable monitoring of memory regions <VAR>nums</VAR><small>...</small>.
 | 
						|
A disabled memory region is not forgotten.
 | 
						|
It may be enabled again later.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX484"></A>
 | 
						|
<DT><CODE>enable mem <VAR>nums</VAR><small>...</small></CODE>
 | 
						|
<DD>Enable monitoring of memory regions <VAR>nums</VAR><small>...</small>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX485"></A>
 | 
						|
<DT><CODE>info mem</CODE>
 | 
						|
<DD>Print a table of all defined memory regions, with the following columns
 | 
						|
for each region:
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><EM>Memory Region Number</EM>
 | 
						|
<DD><DT><EM>Enabled or Disabled.</EM>
 | 
						|
<DD>Enabled memory regions are marked with <SAMP>`y'</SAMP>.
 | 
						|
Disabled memory regions are marked with <SAMP>`n'</SAMP>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><EM>Lo Address</EM>
 | 
						|
<DD>The address defining the inclusive lower bound of the memory region.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><EM>Hi Address</EM>
 | 
						|
<DD>The address defining the exclusive upper bound of the memory region.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><EM>Attributes</EM>
 | 
						|
<DD>The list of attributes set for this memory region.
 | 
						|
</DL>
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC74"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC73"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC75"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC73"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC78"> >> </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>
 | 
						|
<H3> 8.14.1 Attributes </H3>
 | 
						|
<!--docid::SEC74::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC75"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC74"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC76"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC74"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC78"> >> </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>
 | 
						|
<H4> 8.14.1.1 Memory Access Mode </H4>
 | 
						|
<!--docid::SEC75::-->
 | 
						|
The access mode attributes set whether GDB may make read or
 | 
						|
write accesses to a memory region.
 | 
						|
<P>
 | 
						|
 | 
						|
While these attributes prevent GDB from performing invalid
 | 
						|
memory accesses, they do nothing to prevent the target system, I/O DMA,
 | 
						|
etc. from accessing memory.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>ro</CODE>
 | 
						|
<DD>Memory is read only.
 | 
						|
<DT><CODE>wo</CODE>
 | 
						|
<DD>Memory is write only.
 | 
						|
<DT><CODE>rw</CODE>
 | 
						|
<DD>Memory is read/write.  This is the default.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC76"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC75"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC77"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC77"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC74"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC78"> >> </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>
 | 
						|
<H4> 8.14.1.2 Memory Access Size </H4>
 | 
						|
<!--docid::SEC76::-->
 | 
						|
The access size attribute tells GDB to use specific sized
 | 
						|
accesses in the memory region.  Often memory mapped device registers
 | 
						|
require specific sized accesses.  If no access size attribute is
 | 
						|
specified, GDB may use accesses of any size.
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>8</CODE>
 | 
						|
<DD>Use 8 bit memory accesses.
 | 
						|
<DT><CODE>16</CODE>
 | 
						|
<DD>Use 16 bit memory accesses.
 | 
						|
<DT><CODE>32</CODE>
 | 
						|
<DD>Use 32 bit memory accesses.
 | 
						|
<DT><CODE>64</CODE>
 | 
						|
<DD>Use 64 bit memory accesses.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC77"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC76"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC78"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC74"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC78"> >> </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>
 | 
						|
<H4> 8.14.1.3 Data Cache </H4>
 | 
						|
<!--docid::SEC77::-->
 | 
						|
The data cache attributes set whether GDB will cache target
 | 
						|
memory.  While this generally improves performance by reducing debug
 | 
						|
protocol overhead, it can lead to incorrect results because GDB
 | 
						|
does not know about volatile variables or memory mapped device
 | 
						|
registers.
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>cache</CODE>
 | 
						|
<DD>Enable GDB to cache target memory.
 | 
						|
<DT><CODE>nocache</CODE>
 | 
						|
<DD>Disable GDB from caching target memory.  This is the default.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC78"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC77"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC79"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC73"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC79"> >> </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>
 | 
						|
<H3> 8.14.2 Memory Access Checking </H3>
 | 
						|
<!--docid::SEC78::-->
 | 
						|
GDB can be instructed to refuse accesses to memory that is
 | 
						|
not explicitly described.  This can be useful if accessing such
 | 
						|
regions has undesired effects for a specific target, or to provide
 | 
						|
better error checking.  The following commands control this behaviour.
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX486"></A>
 | 
						|
<DT><CODE>set mem inaccessible-by-default [on|off]</CODE>
 | 
						|
<DD>If <CODE>on</CODE> is specified, make  GDB treat memory not
 | 
						|
explicitly described by the memory ranges as non-existent and refuse accesses
 | 
						|
to such memory.  The checks are only performed if there's at least one
 | 
						|
memory range defined.  If <CODE>off</CODE> is specified, make GDB
 | 
						|
treat the memory not explicitly described by the memory ranges as RAM.
 | 
						|
The default value is <CODE>on</CODE>.
 | 
						|
<A NAME="IDX487"></A>
 | 
						|
<DT><CODE>show mem inaccessible-by-default</CODE>
 | 
						|
<DD>Show the current handling of accesses to unknown memory.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Dump/Restore Files"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC79"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC78"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC80"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.15 Copy Between Memory and a File </H2>
 | 
						|
<!--docid::SEC79::-->
 | 
						|
<P>
 | 
						|
 | 
						|
You can use the commands <CODE>dump</CODE>, <CODE>append</CODE>, and
 | 
						|
<CODE>restore</CODE> to copy data between target memory and a file.  The
 | 
						|
<CODE>dump</CODE> and <CODE>append</CODE> commands write data to a file, and the
 | 
						|
<CODE>restore</CODE> command reads data from a file back into the inferior's
 | 
						|
memory.  Files may be in binary, Motorola S-record, Intel hex, or
 | 
						|
Tektronix Hex format; however, GDB can only append to binary
 | 
						|
files.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
 | 
						|
<A NAME="IDX488"></A>
 | 
						|
<DT><CODE>dump [<VAR>format</VAR>] memory <VAR>filename</VAR> <VAR>start_addr</VAR> <VAR>end_addr</VAR></CODE>
 | 
						|
<DD><DT><CODE>dump [<VAR>format</VAR>] value <VAR>filename</VAR> <VAR>expr</VAR></CODE>
 | 
						|
<DD>Dump the contents of memory from <VAR>start_addr</VAR> to <VAR>end_addr</VAR>,
 | 
						|
or the value of <VAR>expr</VAR>, to <VAR>filename</VAR> in the given format.
 | 
						|
<P>
 | 
						|
 | 
						|
The <VAR>format</VAR> parameter may be any one of:
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>binary</CODE>
 | 
						|
<DD>Raw binary form.
 | 
						|
<DT><CODE>ihex</CODE>
 | 
						|
<DD>Intel hex format.
 | 
						|
<DT><CODE>srec</CODE>
 | 
						|
<DD>Motorola S-record format.
 | 
						|
<DT><CODE>tekhex</CODE>
 | 
						|
<DD>Tektronix Hex format.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
GDB uses the same definitions of these formats as the
 | 
						|
GNU binary utilities, like <SAMP>`objdump'</SAMP> and <SAMP>`objcopy'</SAMP>.  If
 | 
						|
<VAR>format</VAR> is omitted, GDB dumps the data in raw binary
 | 
						|
form.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX489"></A>
 | 
						|
<DT><CODE>append [binary] memory <VAR>filename</VAR> <VAR>start_addr</VAR> <VAR>end_addr</VAR></CODE>
 | 
						|
<DD><DT><CODE>append [binary] value <VAR>filename</VAR> <VAR>expr</VAR></CODE>
 | 
						|
<DD>Append the contents of memory from <VAR>start_addr</VAR> to <VAR>end_addr</VAR>,
 | 
						|
or the value of <VAR>expr</VAR>, to the file <VAR>filename</VAR>, in raw binary form.
 | 
						|
(GDB can only append data to files in raw binary form.)
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX490"></A>
 | 
						|
<DT><CODE>restore <VAR>filename</VAR> [binary] <VAR>bias</VAR> <VAR>start</VAR> <VAR>end</VAR></CODE>
 | 
						|
<DD>Restore the contents of file <VAR>filename</VAR> into memory.  The
 | 
						|
<CODE>restore</CODE> command can automatically recognize any known BFD
 | 
						|
file format, except for raw binary.  To restore a raw binary file you
 | 
						|
must specify the optional keyword <CODE>binary</CODE> after the filename.
 | 
						|
<P>
 | 
						|
 | 
						|
If <VAR>bias</VAR> is non-zero, its value will be added to the addresses
 | 
						|
contained in the file.  Binary files always start at address zero, so
 | 
						|
they will be restored at address <VAR>bias</VAR>.  Other bfd files have
 | 
						|
a built-in location; they will be restored at offset <VAR>bias</VAR>
 | 
						|
from that location.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If <VAR>start</VAR> and/or <VAR>end</VAR> are non-zero, then only data between
 | 
						|
file offset <VAR>start</VAR> and file offset <VAR>end</VAR> will be restored.
 | 
						|
These offsets are relative to the addresses in the file, before
 | 
						|
the <VAR>bias</VAR> argument is applied.
 | 
						|
</P><P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Core File Generation"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC80"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC79"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC81"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.16 How to Produce a Core File from Your Program </H2>
 | 
						|
<!--docid::SEC80::-->
 | 
						|
<P>
 | 
						|
 | 
						|
A <EM>core file</EM> or <EM>core dump</EM> is a file that records the memory
 | 
						|
image of a running process and its process status (register values
 | 
						|
etc.).  Its primary use is post-mortem debugging of a program that
 | 
						|
crashed while it ran outside a debugger.  A program that crashes
 | 
						|
automatically produces a core file, unless this feature is disabled by
 | 
						|
the user.  See section <A HREF="gdb_16.html#SEC155">15.1 Commands to Specify Files</A>, for information on invoking GDB in
 | 
						|
the post-mortem debugging mode.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Occasionally, you may wish to produce a core file of the program you
 | 
						|
are debugging in order to preserve a snapshot of its state.
 | 
						|
GDB has a special command for that.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX491"></A>
 | 
						|
<A NAME="IDX492"></A>
 | 
						|
<DT><CODE>generate-core-file [<VAR>file</VAR>]</CODE>
 | 
						|
<DD><DT><CODE>gcore [<VAR>file</VAR>]</CODE>
 | 
						|
<DD>Produce a core dump of the inferior process.  The optional argument
 | 
						|
<VAR>file</VAR> specifies the file name where to put the core dump.  If not
 | 
						|
specified, the file name defaults to <TT>`core.<VAR>pid</VAR>'</TT>, where
 | 
						|
<VAR>pid</VAR> is the inferior process ID.
 | 
						|
<P>
 | 
						|
 | 
						|
Note that this command is implemented only for some systems (as of
 | 
						|
this writing, GNU/Linux, FreeBSD, Solaris, Unixware, and S390).
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Character Sets"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC81"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC80"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC82"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.17 Character Sets </H2>
 | 
						|
<!--docid::SEC81::-->
 | 
						|
<P>
 | 
						|
 | 
						|
If the program you are debugging uses a different character set to
 | 
						|
represent characters and strings than the one GDB uses itself,
 | 
						|
GDB can automatically translate between the character sets for
 | 
						|
you.  The character set GDB uses we call the <EM>host
 | 
						|
character set</EM>; the one the inferior program uses we call the
 | 
						|
<EM>target character set</EM>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example, if you are running GDB on a GNU/Linux system, which
 | 
						|
uses the ISO Latin 1 character set, but you are using GDB's
 | 
						|
remote protocol (see section <A HREF="gdb_18.html#SEC162">17. Debugging Remote Programs</A>) to debug a program
 | 
						|
running on an IBM mainframe, which uses the EBCDIC character set,
 | 
						|
then the host character set is Latin-1, and the target character set is
 | 
						|
EBCDIC.  If you give GDB the command <CODE>set
 | 
						|
target-charset EBCDIC-US</CODE>, then GDB translates between
 | 
						|
EBCDIC and Latin 1 as you print character or string values, or use
 | 
						|
character and string literals in expressions.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB has no way to automatically recognize which character set
 | 
						|
the inferior program uses; you must tell it, using the <CODE>set
 | 
						|
target-charset</CODE> command, described below.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Here are the commands for controlling GDB's character set
 | 
						|
support:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set target-charset <VAR>charset</VAR></CODE>
 | 
						|
<DD><A NAME="IDX493"></A>
 | 
						|
Set the current target character set to <VAR>charset</VAR>.  We list the
 | 
						|
character set names GDB recognizes below, but if you type
 | 
						|
<CODE>set target-charset</CODE> followed by <KBD>TAB</KBD><KBD>TAB</KBD>, GDB will
 | 
						|
list the target character sets it supports.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>set host-charset <VAR>charset</VAR></CODE>
 | 
						|
<DD><A NAME="IDX494"></A>
 | 
						|
Set the current host character set to <VAR>charset</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
By default, GDB uses a host character set appropriate to the
 | 
						|
system it is running on; you can override that default using the
 | 
						|
<CODE>set host-charset</CODE> command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB can only use certain character sets as its host character
 | 
						|
set.  We list the character set names GDB recognizes below, and
 | 
						|
indicate which can be host character sets, but if you type
 | 
						|
<CODE>set target-charset</CODE> followed by <KBD>TAB</KBD><KBD>TAB</KBD>, GDB will
 | 
						|
list the host character sets it supports.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>set charset <VAR>charset</VAR></CODE>
 | 
						|
<DD><A NAME="IDX495"></A>
 | 
						|
Set the current host and target character sets to <VAR>charset</VAR>.  As
 | 
						|
above, if you type <CODE>set charset</CODE> followed by <KBD>TAB</KBD><KBD>TAB</KBD>,
 | 
						|
GDB will list the name of the character sets that can be used
 | 
						|
for both host and target.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show charset</CODE>
 | 
						|
<DD><A NAME="IDX496"></A>
 | 
						|
Show the names of the current host and target charsets.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show host-charset</CODE>
 | 
						|
<DD><A NAME="IDX497"></A>
 | 
						|
Show the name of the current host charset.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show target-charset</CODE>
 | 
						|
<DD><A NAME="IDX498"></A>
 | 
						|
Show the name of the current target charset.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
GDB currently includes support for the following character
 | 
						|
sets:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
 | 
						|
<DT><CODE>ASCII</CODE>
 | 
						|
<DD><A NAME="IDX499"></A>
 | 
						|
Seven-bit U.S. ASCII.  GDB can use this as its host
 | 
						|
character set.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>ISO-8859-1</CODE>
 | 
						|
<DD><A NAME="IDX500"></A>
 | 
						|
<A NAME="IDX501"></A>
 | 
						|
The ISO Latin 1 character set.  This extends ASCII with accented
 | 
						|
characters needed for French, German, and Spanish.  GDB can use
 | 
						|
this as its host character set.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>EBCDIC-US</CODE>
 | 
						|
<DD><DT><CODE>IBM1047</CODE>
 | 
						|
<DD><A NAME="IDX502"></A>
 | 
						|
<A NAME="IDX503"></A>
 | 
						|
Variants of the EBCDIC character set, used on some of IBM's
 | 
						|
mainframe operating systems.  (GNU/Linux on the S/390 uses U.S. ASCII.)
 | 
						|
GDB cannot use these as its host character set.
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Note that these are all single-byte character sets.  More work inside
 | 
						|
GDB is needed to support multi-byte or variable-width character
 | 
						|
encodings, like the UTF-8 and UCS-2 encodings of Unicode.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Here is an example of GDB's character set support in action.
 | 
						|
Assume that the following source code has been placed in the file
 | 
						|
<TT>`charset-test.c'</TT>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#include <stdio.h>
 | 
						|
 | 
						|
char ascii_hello[]
 | 
						|
  = {72, 101, 108, 108, 111, 44, 32, 119,
 | 
						|
     111, 114, 108, 100, 33, 10, 0};
 | 
						|
char ibm1047_hello[]
 | 
						|
  = {200, 133, 147, 147, 150, 107, 64, 166,
 | 
						|
     150, 153, 147, 132, 90, 37, 0};
 | 
						|
 | 
						|
main ()
 | 
						|
{
 | 
						|
  printf ("Hello, world!\n");
 | 
						|
}
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
In this program, <CODE>ascii_hello</CODE> and <CODE>ibm1047_hello</CODE> are arrays
 | 
						|
containing the string <SAMP>`Hello, world!'</SAMP> followed by a newline,
 | 
						|
encoded in the ASCII and IBM1047 character sets.
 | 
						|
</P><P>
 | 
						|
 | 
						|
We compile the program, and invoke the debugger on it:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ gcc -g charset-test.c -o charset-test
 | 
						|
$ gdb -nw charset-test
 | 
						|
GNU gdb 2001-12-19-cvs
 | 
						|
Copyright 2001 Free Software Foundation, Inc.
 | 
						|
<small>...</small>
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
We can use the <CODE>show charset</CODE> command to see what character sets
 | 
						|
GDB is currently using to interpret and display characters and
 | 
						|
strings:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) show charset
 | 
						|
The current host and target character set is `ISO-8859-1'.
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
For the sake of printing this manual, let's use ASCII as our
 | 
						|
initial character set:
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set charset ASCII
 | 
						|
(gdb) show charset
 | 
						|
The current host and target character set is `ASCII'.
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Let's assume that ASCII is indeed the correct character set for our
 | 
						|
host system -- in other words, let's assume that if GDB prints
 | 
						|
characters using the ASCII character set, our terminal will display
 | 
						|
them properly.  Since our current target character set is also
 | 
						|
ASCII, the contents of <CODE>ascii_hello</CODE> print legibly:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print ascii_hello
 | 
						|
$1 = 0x401698 "Hello, world!\n"
 | 
						|
(gdb) print ascii_hello[0]
 | 
						|
$2 = 72 'H'
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
GDB uses the target character set for character and string
 | 
						|
literals you use in expressions:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print '+'
 | 
						|
$3 = 43 '+'
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The ASCII character set uses the number 43 to encode the <SAMP>`+'</SAMP>
 | 
						|
character.
 | 
						|
</P><P>
 | 
						|
 | 
						|
GDB relies on the user to tell it which character set the
 | 
						|
target program uses.  If we print <CODE>ibm1047_hello</CODE> while our target
 | 
						|
character set is still ASCII, we get jibberish:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print ibm1047_hello
 | 
						|
$4 = 0x4016a8 "\310\205\223\223\226k@\246\226\231\223\204Z%"
 | 
						|
(gdb) print ibm1047_hello[0]
 | 
						|
$5 = 200 '\310'
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
If we invoke the <CODE>set target-charset</CODE> followed by <KBD>TAB</KBD><KBD>TAB</KBD>,
 | 
						|
GDB tells us the character sets it supports:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set target-charset
 | 
						|
ASCII       EBCDIC-US   IBM1047     ISO-8859-1
 | 
						|
(gdb) set target-charset
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
We can select IBM1047 as our target character set, and examine the
 | 
						|
program's strings again.  Now the ASCII string is wrong, but
 | 
						|
GDB translates the contents of <CODE>ibm1047_hello</CODE> from the
 | 
						|
target character set, IBM1047, to the host character set,
 | 
						|
ASCII, and they display correctly:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set target-charset IBM1047
 | 
						|
(gdb) show charset
 | 
						|
The current host character set is `ASCII'.
 | 
						|
The current target character set is `IBM1047'.
 | 
						|
(gdb) print ascii_hello
 | 
						|
$6 = 0x401698 "\110\145%%?\054\040\167?\162%\144\041\012"
 | 
						|
(gdb) print ascii_hello[0]
 | 
						|
$7 = 72 '\110'
 | 
						|
(gdb) print ibm1047_hello
 | 
						|
$8 = 0x4016a8 "Hello, world!\n"
 | 
						|
(gdb) print ibm1047_hello[0]
 | 
						|
$9 = 200 'H'
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
As above, GDB uses the target character set for character and
 | 
						|
string literals you use in expressions:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) print '+'
 | 
						|
$10 = 78 '+'
 | 
						|
(gdb)
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
The IBM1047 character set uses the number 78 to encode the <SAMP>`+'</SAMP>
 | 
						|
character.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="Caching Remote Data"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC82"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC81"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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> 8.18 Caching Data of Remote Targets </H2>
 | 
						|
<!--docid::SEC82::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB can cache data exchanged between the debugger and a
 | 
						|
remote target (see section <A HREF="gdb_18.html#SEC162">17. Debugging Remote Programs</A>).  Such caching generally improves
 | 
						|
performance, because it reduces the overhead of the remote protocol by
 | 
						|
bundling memory reads and writes into large chunks.  Unfortunately,
 | 
						|
GDB does not currently know anything about volatile
 | 
						|
registers, and thus data caching will produce incorrect results when
 | 
						|
volatile registers are in use.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX504"></A>
 | 
						|
<DT><CODE>set remotecache on</CODE>
 | 
						|
<DD><DT><CODE>set remotecache off</CODE>
 | 
						|
<DD>Set caching state for remote targets.  When <CODE>ON</CODE>, use data
 | 
						|
caching.  By default, this option is <CODE>OFF</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX505"></A>
 | 
						|
<DT><CODE>show remotecache</CODE>
 | 
						|
<DD>Show the current state of data caching for remote targets.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX506"></A>
 | 
						|
<DT><CODE>info dcache</CODE>
 | 
						|
<DD>Print the information about the data cache performance.  The
 | 
						|
information displayed includes: the dcache width and depth; and for
 | 
						|
each cache line, how many times it was referenced, and its data and
 | 
						|
state (dirty, bad, ok, etc.).  This command is useful for debugging
 | 
						|
the data cache operation.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Macros"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC61"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_10.html#SEC83"> >> </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>
 |