blob: 63f731d5320dc010395aab553a3d997199a05a35 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 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." -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Completion</title>
<meta name="description" content="Debugging with GDB: Completion">
<meta name="keywords" content="Debugging with GDB: Completion">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Commands.html#Commands" rel="up" title="Commands">
<link href="Help.html#Help" rel="next" title="Help">
<link href="Command-Syntax.html#Command-Syntax" rel="prev" title="Command Syntax">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Completion"></a>
<div class="header">
<p>
Next: <a href="Help.html#Help" accesskey="n" rel="next">Help</a>, Previous: <a href="Command-Syntax.html#Command-Syntax" accesskey="p" rel="prev">Command Syntax</a>, Up: <a href="Commands.html#Commands" accesskey="u" rel="up">Commands</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Command-Completion"></a>
<h3 class="section">3.2 Command Completion</h3>
<a name="index-completion"></a>
<a name="index-word-completion"></a>
<p><small>GDB</small> can fill in the rest of a word in a command for you, if there is
only one possibility; it can also show you what the valid possibilities
are for the next word in a command, at any time. This works for <small>GDB</small>
commands, <small>GDB</small> subcommands, and the names of symbols in your program.
</p>
<p>Press the <tt class="key">TAB</tt> key whenever you want <small>GDB</small> to fill out the rest
of a word. If there is only one possibility, <small>GDB</small> fills in the
word, and waits for you to finish the command (or press <tt class="key">RET</tt> to
enter it). For example, if you type
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) info bre <span class="key">TAB</span>
</pre></div>
<p><small>GDB</small> fills in the rest of the word &lsquo;<samp>breakpoints</samp>&rsquo;, since that is
the only <code>info</code> subcommand beginning with &lsquo;<samp>bre</samp>&rsquo;:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) info breakpoints
</pre></div>
<p>You can either press <tt class="key">RET</tt> at this point, to run the <code>info
breakpoints</code> command, or backspace and enter something else, if
&lsquo;<samp>breakpoints</samp>&rsquo; does not look like the command you expected. (If you
were sure you wanted <code>info breakpoints</code> in the first place, you
might as well just type <tt class="key">RET</tt> immediately after &lsquo;<samp>info bre</samp>&rsquo;,
to exploit command abbreviations rather than command completion).
</p>
<p>If there is more than one possibility for the next word when you press
<tt class="key">TAB</tt>, <small>GDB</small> sounds a bell. You can either supply more
characters and try again, or just press <tt class="key">TAB</tt> a second time;
<small>GDB</small> displays all the possible completions for that word. For
example, you might want to set a breakpoint on a subroutine whose name
begins with &lsquo;<samp>make_</samp>&rsquo;, but when you type <kbd>b make_<span class="key">TAB</span></kbd> <small>GDB</small>
just sounds the bell. Typing <tt class="key">TAB</tt> again displays all the
function names in your program that begin with those characters, for
example:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) b make_ <span class="key">TAB</span>
</pre><pre class="smallexample">GDB sounds bell; press <span class="key">TAB</span> again, to see:
</pre><pre class="smallexample">make_a_section_from_file make_environ
make_abs_section make_function_type
make_blockvector make_pointer_type
make_cleanup make_reference_type
make_command make_symbol_completion_list
(gdb) b make_
</pre></div>
<p>After displaying the available possibilities, <small>GDB</small> copies your
partial input (&lsquo;<samp>b make_</samp>&rsquo; in the example) so you can finish the
command.
</p>
<p>If you just want to see the list of alternatives in the first place, you
can press <kbd>M-?</kbd> rather than pressing <tt class="key">TAB</tt> twice. <kbd>M-?</kbd>
means <kbd><span class="key">META</span> ?</kbd>. You can type this either by holding down a
key designated as the <tt class="key">META</tt> shift on your keyboard (if there is
one) while typing <kbd>?</kbd>, or as <tt class="key">ESC</tt> followed by <kbd>?</kbd>.
</p>
<p>If the number of possible completions is large, <small>GDB</small> will
print as much of the list as it has collected, as well as a message
indicating that the list may be truncated.
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) b m<span class="key">TAB</span><span class="key">TAB</span>
main
&lt;... the rest of the possible completions ...&gt;
*** List may be truncated, max-completions reached. ***
(gdb) b m
</pre></div>
<p>This behavior can be controlled with the following commands:
</p>
<dl compact="compact">
<dd><a name="index-set-max_002dcompletions"></a>
</dd>
<dt><code>set max-completions <var>limit</var></code></dt>
<dt><code>set max-completions unlimited</code></dt>
<dd><p>Set the maximum number of completion candidates. <small>GDB</small> will
stop looking for more completions once it collects this many candidates.
This is useful when completing on things like function names as collecting
all the possible candidates can be time consuming.
The default value is 200. A value of zero disables tab-completion.
Note that setting either no limit or a very large limit can make
completion slow.
<a name="index-show-max_002dcompletions"></a>
</p></dd>
<dt><code>show max-completions</code></dt>
<dd><p>Show the maximum number of candidates that <small>GDB</small> will collect and show
during completion.
</p></dd>
</dl>
<a name="index-quotes-in-commands"></a>
<a name="index-completion-of-quoted-strings"></a>
<p>Sometimes the string you need, while logically a &ldquo;word&rdquo;, may contain
parentheses or other characters that <small>GDB</small> normally excludes from
its notion of a word. To permit word completion to work in this
situation, you may enclose words in <code>'</code> (single quote marks) in
<small>GDB</small> commands.
</p>
<p>The most likely situation where you might need this is in typing the
name of a C<tt>++</tt> function. This is because C<tt>++</tt> allows function
overloading (multiple definitions of the same function, distinguished
by argument type). For example, when you want to set a breakpoint you
may need to distinguish whether you mean the version of <code>name</code>
that takes an <code>int</code> parameter, <code>name(int)</code>, or the version
that takes a <code>float</code> parameter, <code>name(float)</code>. To use the
word-completion facilities in this situation, type a single quote
<code>'</code> at the beginning of the function name. This alerts
<small>GDB</small> that it may need to consider more information than usual
when you press <tt class="key">TAB</tt> or <kbd>M-?</kbd> to request word completion:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) b 'bubble( <kbd>M-?</kbd>
bubble(double,double) bubble(int,int)
(gdb) b 'bubble(
</pre></div>
<p>In some cases, <small>GDB</small> can tell that completing a name requires using
quotes. When this happens, <small>GDB</small> inserts the quote for you (while
completing as much as it can) if you do not type the quote in the first
place:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) b bub <span class="key">TAB</span>
</pre><pre class="smallexample">GDB alters your input line to the following, and rings a bell:
</pre><pre class="smallexample">(gdb) b 'bubble(
</pre></div>
<p>In general, <small>GDB</small> can tell that a quote is needed (and inserts it) if
you have not yet started typing the argument list when you ask for
completion on an overloaded symbol.
</p>
<p>For more information about overloaded functions, see <a href="C-Plus-Plus-Expressions.html#C-Plus-Plus-Expressions">C<tt>++</tt> Expressions</a>. You can use the command <code>set
overload-resolution off</code> to disable overload resolution;
see <a href="Debugging-C-Plus-Plus.html#Debugging-C-Plus-Plus"><small>GDB</small> Features for C<tt>++</tt></a>.
</p>
<a name="index-completion-of-structure-field-names"></a>
<a name="index-structure-field-name-completion"></a>
<a name="index-completion-of-union-field-names"></a>
<a name="index-union-field-name-completion"></a>
<p>When completing in an expression which looks up a field in a
structure, <small>GDB</small> also tries<a name="DOCF2" href="#FOOT2"><sup>2</sup></a> to
limit completions to the field names available in the type of the
left-hand-side:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) p gdb_stdout.<kbd>M-?</kbd>
magic to_fputs to_rewind
to_data to_isatty to_write
to_delete to_put to_write_async_safe
to_flush to_read
</pre></div>
<p>This is because the <code>gdb_stdout</code> is a variable of the type
<code>struct ui_file</code> that is defined in <small>GDB</small> sources as
follows:
</p>
<div class="smallexample">
<pre class="smallexample">struct ui_file
{
int *magic;
ui_file_flush_ftype *to_flush;
ui_file_write_ftype *to_write;
ui_file_write_async_safe_ftype *to_write_async_safe;
ui_file_fputs_ftype *to_fputs;
ui_file_read_ftype *to_read;
ui_file_delete_ftype *to_delete;
ui_file_isatty_ftype *to_isatty;
ui_file_rewind_ftype *to_rewind;
ui_file_put_ftype *to_put;
void *to_data;
}
</pre></div>
<div class="footnote">
<hr>
<h4 class="footnotes-heading">Footnotes</h4>
<h3><a name="FOOT2" href="#DOCF2">(2)</a></h3>
<p>The completer can be
confused by certain kinds of invalid expressions. Also, it only
examines the static type of the expression, not the dynamic type.</p>
</div>
<hr>
<div class="header">
<p>
Next: <a href="Help.html#Help" accesskey="n" rel="next">Help</a>, Previous: <a href="Command-Syntax.html#Command-Syntax" accesskey="p" rel="prev">Command Syntax</a>, Up: <a href="Commands.html#Commands" accesskey="u" rel="up">Commands</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>