blob: f65ab2caade600121ff0be14c9ae806bd661941e [file] [log] [blame]
<html lang="en">
<head>
<title>Print Settings - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Data.html#Data" title="Data">
<link rel="prev" href="Auto-Display.html#Auto-Display" title="Auto Display">
<link rel="next" href="Pretty-Printing.html#Pretty-Printing" title="Pretty Printing">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Print-Settings"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Pretty-Printing.html#Pretty-Printing">Pretty Printing</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Auto-Display.html#Auto-Display">Auto Display</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Data.html#Data">Data</a>
<hr>
</div>
<h3 class="section">10.8 Print Settings</h3>
<p><a name="index-format-options-539"></a><a name="index-print-settings-540"></a><span class="sc">gdb</span> provides the following ways to control how arrays, structures,
and symbols are printed.
<p class="noindent">These settings are useful for debugging programs in any language:
<a name="index-set-print-541"></a>
<dl><dt><code>set print address</code><dt><code>set print address on</code><dd><a name="index-print_002fdon_0027t-print-memory-addresses-542"></a><span class="sc">gdb</span> 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>:
<pre class="smallexample"> (gdb) f
#0 set_quotes (lq=0x34c78 "&lt;&lt;", rq=0x34c88 "&gt;&gt;")
at input.c:530
530 if (lquote != def_lquote)
</pre>
<br><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>:
<pre class="smallexample"> (gdb) set print addr off
(gdb) f
#0 set_quotes (lq="&lt;&lt;", rq="&gt;&gt;") at input.c:530
530 if (lquote != def_lquote)
</pre>
<p>You can use &lsquo;<samp><span class="samp">set print address off</span></samp>&rsquo; to eliminate all machine
dependent displays from the <span class="sc">gdb</span> interface. For example, with
<code>print address off</code>, you should get the same text for backtraces on
all machines&mdash;whether or not they involve pointer arguments.
<p><a name="index-show-print-543"></a><br><dt><code>show print address</code><dd>Show whether or not addresses are to be printed.
</dl>
<p>When <span class="sc">gdb</span> 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 &lsquo;<samp><span class="samp">info line *0x4537</span></samp>&rsquo;. Alternately,
you can set <span class="sc">gdb</span> to print the source file and line number when
it prints a symbolic address:
<dl>
<dt><code>set print symbol-filename on</code><dd><a name="index-source-file-and-line-of-a-symbol-544"></a><a name="index-symbol_002c-source-file-and-line-545"></a>Tell <span class="sc">gdb</span> to print the source file name and line number of a
symbol in the symbolic form of an address.
<br><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.
<br><dt><code>show print symbol-filename</code><dd>Show whether or not <span class="sc">gdb</span> 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; <span class="sc">gdb</span> shows you the line
number and source file that corresponds to each instruction.
<p>Also, you may wish to see the symbolic form only if the address being
printed is reasonably close to the closest earlier symbol:
<dl>
<dt><code>set print max-symbolic-offset </code><var>max-offset</var><dd><a name="index-maximum-value-for-offset-of-closest-symbol-546"></a>Tell <span class="sc">gdb</span> 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 <span class="sc">gdb</span>
to always print the symbolic form of an address if any symbol precedes it.
<br><dt><code>show print max-symbolic-offset</code><dd>Ask how large the maximum offset is that <span class="sc">gdb</span> prints in a
symbolic address.
</dl>
<p><a name="index-wild-pointer_002c-interpreting-547"></a><a name="index-pointer_002c-finding-referent-548"></a>If you have a pointer and you are not sure where it points, try
&lsquo;<samp><span class="samp">set print symbol-filename on</span></samp>&rsquo;. Then you can determine the name
and source file location of the variable where it points, using
&lsquo;<samp><span class="samp">p/a </span><var>pointer</var></samp>&rsquo;. This interprets the address in symbolic form.
For example, here <span class="sc">gdb</span> shows that a variable <code>ptt</code> points
at another variable <code>t</code>, defined in <samp><span class="file">hi2.c</span></samp>:
<pre class="smallexample"> (gdb) set print symbol-filename on
(gdb) p/a ptt
$4 = 0xe008 &lt;t in hi2.c&gt;
</pre>
<blockquote>
<em>Warning:</em> For pointers that point to a local variable, &lsquo;<samp><span class="samp">p/a</span></samp>&rsquo;
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:
<dl>
<dt><code>set print array</code><dt><code>set print array on</code><dd><a name="index-pretty-print-arrays-549"></a>Pretty print arrays. This format is more convenient to read,
but uses more space. The default is off.
<br><dt><code>set print array off</code><dd>Return to compressed format for arrays.
<br><dt><code>show print array</code><dd>Show whether compressed or pretty format is selected for displaying
arrays.
<p><a name="index-print-array-indexes-550"></a><br><dt><code>set print array-indexes</code><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.
<br><dt><code>set print array-indexes off</code><dd>Stop printing element indexes when displaying arrays.
<br><dt><code>show print array-indexes</code><dd>Show whether the index of each element is printed when displaying
arrays.
<br><dt><code>set print elements </code><var>number-of-elements</var><dd><a name="index-number-of-array-elements-to-print-551"></a><a name="index-limit-on-number-of-printed-array-elements-552"></a>Set a limit on how many elements of an array <span class="sc">gdb</span> will print.
If <span class="sc">gdb</span> 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 <span class="sc">gdb</span> starts, this limit is set to 200.
Setting <var>number-of-elements</var> to zero means that the printing is unlimited.
<br><dt><code>show print elements</code><dd>Display the number of elements of a large array that <span class="sc">gdb</span> will print.
If the number is 0, then the printing is unlimited.
<br><dt><code>set print frame-arguments </code><var>value</var><dd><a name="index-set-print-frame_002darguments-553"></a><a name="index-printing-frame-argument-values-554"></a><a name="index-print-all-frame-argument-values-555"></a><a name="index-print-frame-argument-values-for-scalars-only-556"></a><a name="index-do-not-print-frame-argument-values-557"></a>This command allows to control how the values of arguments are printed
when the debugger prints a frame (see <a href="Frames.html#Frames">Frames</a>). The possible
values are:
<dl>
<dt><code>all</code><dd>The values of all arguments are printed.
<br><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>...</code>. This is the default. Here is an example where
only scalar arguments are shown:
<pre class="smallexample"> #1 0x08048361 in call_me (i=3, s=..., ss=0xbf8d508c, u=..., e=green)
at frame-args.c:23
</pre>
<br><dt><code>none</code><dd>None of the argument values are printed. Instead, the value of each argument
is replaced by <code>...</code>. In this case, the example above now becomes:
<pre class="smallexample"> #1 0x08048361 in call_me (i=..., s=..., ss=..., u=..., e=...)
at frame-args.c:23
</pre>
</dl>
<p>By default, only scalar arguments are printed. This command can be used
to configure the debugger to print the value of all arguments, regardless
of their type. However, it is often advantageous to not print the value
of more complex parameters. For instance, it reduces the amount of
information printed in each frame, making the backtrace more readable.
Also, it improves performance when displaying Ada frames, because
the computation of large arguments can sometimes be CPU-intensive,
especially in large applications. Setting <code>print frame-arguments</code>
to <code>scalars</code> (the default) or <code>none</code> avoids this computation,
thus speeding up the display of each Ada frame.
<br><dt><code>show print frame-arguments</code><dd>Show how the value of arguments should be displayed when printing a frame.
<br><dt><code>set print repeats</code><dd><a name="index-repeated-array-elements-558"></a>Set the threshold for suppressing display of repeated array
elements. When the number of consecutive identical elements of an
array exceeds the threshold, <span class="sc">gdb</span> prints the string
<code>"&lt;repeats </code><var>n</var><code> times&gt;"</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.
<br><dt><code>show print repeats</code><dd>Display the current threshold for printing repeated identical
elements.
<br><dt><code>set print null-stop</code><dd><a name="index-g_t_0040sc_007bnull_007d-elements-in-arrays-559"></a>Cause <span class="sc">gdb</span> to stop printing the characters of an array when the first
<span class="sc">null</span> is encountered. This is useful when large arrays actually
contain only short strings.
The default is off.
<br><dt><code>show print null-stop</code><dd>Show whether <span class="sc">gdb</span> stops printing an array on the first
<span class="sc">null</span> character.
<br><dt><code>set print pretty on</code><dd><a name="index-print-structures-in-indented-form-560"></a><a name="index-indentation-in-structure-display-561"></a>Cause <span class="sc">gdb</span> to print structures in an indented format with one member
per line, like this:
<pre class="smallexample"> $1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x54 "Pork"
}
</pre>
<br><dt><code>set print pretty off</code><dd>Cause <span class="sc">gdb</span> to print structures in a compact format, like this:
<pre class="smallexample"> $1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
meat = 0x54 "Pork"}
</pre>
<p class="noindent">This is the default format.
<br><dt><code>show print pretty</code><dd>Show which format <span class="sc">gdb</span> is using to print structures.
<br><dt><code>set print sevenbit-strings on</code><dd><a name="index-eight_002dbit-characters-in-strings-562"></a><a name="index-octal-escapes-in-strings-563"></a>Print using only seven-bit characters; if this option is set,
<span class="sc">gdb</span> 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 (<span class="sc">ascii</span>) and you use the
high-order bit of characters as a marker or &ldquo;meta&rdquo; bit.
<br><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.
<br><dt><code>show print sevenbit-strings</code><dd>Show whether or not <span class="sc">gdb</span> is printing only seven-bit characters.
<br><dt><code>set print union on</code><dd><a name="index-unions-in-structures_002c-printing-564"></a>Tell <span class="sc">gdb</span> to print unions which are contained in structures
and other unions. This is the default setting.
<br><dt><code>set print union off</code><dd>Tell <span class="sc">gdb</span> not to print unions which are contained in
structures and other unions. <span class="sc">gdb</span> will print <code>"{...}"</code>
instead.
<br><dt><code>show print union</code><dd>Ask <span class="sc">gdb</span> whether or not it will print unions which are contained in
structures and other unions.
<p>For example, given the declarations
<pre class="smallexample"> 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}};
</pre>
<p class="noindent">with <code>set print union on</code> in effect &lsquo;<samp><span class="samp">p foo</span></samp>&rsquo; would print
<pre class="smallexample"> $1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
</pre>
<p class="noindent">and with <code>set print union off</code> in effect it would print
<pre class="smallexample"> $1 = {it = Tree, form = {...}}
</pre>
<p class="noindent"><code>set print union</code> affects programs written in C-like languages
and in Pascal.
</dl>
<p class="noindent">These settings are of interest when debugging C<tt>++</tt> programs:
<a name="index-demangling-C_0040t_007b_002b_002b_007d-names-565"></a>
<dl><dt><code>set print demangle</code><dt><code>set print demangle on</code><dd>Print C<tt>++</tt> names in their source form rather than in the encoded
(&ldquo;mangled&rdquo;) form passed to the assembler and linker for type-safe
linkage. The default is on.
<br><dt><code>show print demangle</code><dd>Show whether C<tt>++</tt> names are printed in mangled or demangled form.
<br><dt><code>set print asm-demangle</code><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.
<br><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="index-C_0040t_007b_002b_002b_007d-symbol-decoding-style-566"></a><a name="index-symbol-decoding-style_002c-C_0040t_007b_002b_002b_007d-567"></a><a name="index-set-demangle_002dstyle-568"></a><br><dt><code>set demangle-style </code><var>style</var><dd>Choose among several encoding schemes used by different compilers to
represent C<tt>++</tt> names. The choices for <var>style</var> are currently:
<dl>
<dt><code>auto</code><dd>Allow <span class="sc">gdb</span> to choose a decoding style by inspecting your program.
<br><dt><code>gnu</code><dd>Decode based on the <span class="sc">gnu</span> C<tt>++</tt> compiler (<code>g++</code>) encoding algorithm.
This is the default.
<br><dt><code>hp</code><dd>Decode based on the HP ANSI C<tt>++</tt> (<code>aCC</code>) encoding algorithm.
<br><dt><code>lucid</code><dd>Decode based on the Lucid C<tt>++</tt> compiler (<code>lcc</code>) encoding algorithm.
<br><dt><code>arm</code><dd>Decode using the algorithm in the <cite>C</cite><tt>++</tt><cite> Annotated Reference Manual</cite>.
<strong>Warning:</strong> this setting alone is not sufficient to allow
debugging <code>cfront</code>-generated executables. <span class="sc">gdb</span> would
require further enhancement to permit that.
</dl>
If you omit <var>style</var>, you will see a list of possible formats.
<br><dt><code>show demangle-style</code><dd>Display the encoding style currently in use for decoding C<tt>++</tt> symbols.
<br><dt><code>set print object</code><dt><code>set print object on</code><dd><a name="index-derived-type-of-an-object_002c-printing-569"></a><a name="index-display-derived-types-570"></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.
<br><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.
<br><dt><code>show print object</code><dd>Show whether actual, or declared, object types are displayed.
<br><dt><code>set print static-members</code><dt><code>set print static-members on</code><dd><a name="index-static-members-of-C_0040t_007b_002b_002b_007d-objects-571"></a>Print static members when displaying a C<tt>++</tt> object. The default is on.
<br><dt><code>set print static-members off</code><dd>Do not print static members when displaying a C<tt>++</tt> object.
<br><dt><code>show print static-members</code><dd>Show whether C<tt>++</tt> static members are printed or not.
<br><dt><code>set print pascal_static-members</code><dt><code>set print pascal_static-members on</code><dd><a name="index-static-members-of-Pascal-objects-572"></a><a name="index-Pascal-objects_002c-static-members-display-573"></a>Print static members when displaying a Pascal object. The default is on.
<br><dt><code>set print pascal_static-members off</code><dd>Do not print static members when displaying a Pascal object.
<br><dt><code>show print pascal_static-members</code><dd>Show whether Pascal static members are printed or not.
<!-- These don't work with HP ANSI C++ yet. -->
<br><dt><code>set print vtbl</code><dt><code>set print vtbl on</code><dd><a name="index-pretty-print-C_0040t_007b_002b_002b_007d-virtual-function-tables-574"></a><a name="index-virtual-functions-_0028C_0040t_007b_002b_002b_007d_0029-display-575"></a><a name="index-VTBL-display-576"></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>).)
<br><dt><code>set print vtbl off</code><dd>Do not pretty print C<tt>++</tt> virtual function tables.
<br><dt><code>show print vtbl</code><dd>Show whether C<tt>++</tt> virtual function tables are pretty printed, or not.
</dl>
</body></html>