190 lines
11 KiB
HTML
190 lines
11 KiB
HTML
|
<html lang="en">
|
||
|
<head>
|
||
|
<title>Skipping Over Functions and Files - 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="Stopping.html#Stopping" title="Stopping">
|
||
|
<link rel="prev" href="Continuing-and-Stepping.html#Continuing-and-Stepping" title="Continuing and Stepping">
|
||
|
<link rel="next" href="Signals.html#Signals" title="Signals">
|
||
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
||
|
<!--
|
||
|
Copyright (C) 1988-2019 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>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="node">
|
||
|
<a name="Skipping-Over-Functions-and-Files"></a>
|
||
|
<p>
|
||
|
Next: <a rel="next" accesskey="n" href="Signals.html#Signals">Signals</a>,
|
||
|
Previous: <a rel="previous" accesskey="p" href="Continuing-and-Stepping.html#Continuing-and-Stepping">Continuing and Stepping</a>,
|
||
|
Up: <a rel="up" accesskey="u" href="Stopping.html#Stopping">Stopping</a>
|
||
|
<hr>
|
||
|
</div>
|
||
|
|
||
|
<h3 class="section">5.3 Skipping Over Functions and Files</h3>
|
||
|
|
||
|
<p><a name="index-skipping-over-functions-and-files-376"></a>
|
||
|
The program you are debugging may contain some functions which are
|
||
|
uninteresting to debug. The <code>skip</code> command lets you tell <span class="sc">gdb</span> to
|
||
|
skip a function, all functions in a file or a particular function in
|
||
|
a particular file when stepping.
|
||
|
|
||
|
<p>For example, consider the following C function:
|
||
|
|
||
|
<pre class="smallexample"> 101 int func()
|
||
|
102 {
|
||
|
103 foo(boring());
|
||
|
104 bar(boring());
|
||
|
105 }
|
||
|
</pre>
|
||
|
<p class="noindent">Suppose you wish to step into the functions <code>foo</code> and <code>bar</code>, but you
|
||
|
are not interested in stepping through <code>boring</code>. If you run <code>step</code>
|
||
|
at line 103, you'll enter <code>boring()</code>, but if you run <code>next</code>, you'll
|
||
|
step over both <code>foo</code> and <code>boring</code>!
|
||
|
|
||
|
<p>One solution is to <code>step</code> into <code>boring</code> and use the <code>finish</code>
|
||
|
command to immediately exit it. But this can become tedious if <code>boring</code>
|
||
|
is called from many places.
|
||
|
|
||
|
<p>A more flexible solution is to execute <kbd>skip boring</kbd>. This instructs
|
||
|
<span class="sc">gdb</span> never to step into <code>boring</code>. Now when you execute
|
||
|
<code>step</code> at line 103, you'll step over <code>boring</code> and directly into
|
||
|
<code>foo</code>.
|
||
|
|
||
|
<p>Functions may be skipped by providing either a function name, linespec
|
||
|
(see <a href="Specify-Location.html#Specify-Location">Specify Location</a>), regular expression that matches the function's
|
||
|
name, file name or a <code>glob</code>-style pattern that matches the file name.
|
||
|
|
||
|
<p>On Posix systems the form of the regular expression is
|
||
|
“Extended Regular Expressions”. See for example ‘<samp><span class="samp">man 7 regex</span></samp>’
|
||
|
on <span class="sc">gnu</span>/Linux systems. On non-Posix systems the form of the regular
|
||
|
expression is whatever is provided by the <code>regcomp</code> function of
|
||
|
the underlying system.
|
||
|
See for example ‘<samp><span class="samp">man 7 glob</span></samp>’ on <span class="sc">gnu</span>/Linux systems for a
|
||
|
description of <code>glob</code>-style patterns.
|
||
|
|
||
|
|
||
|
<a name="index-skip-377"></a>
|
||
|
<dl><dt><code>skip </code><span class="roman">[</span><var>options</var><span class="roman">]</span><dd>The basic form of the <code>skip</code> command takes zero or more options
|
||
|
that specify what to skip.
|
||
|
The <var>options</var> argument is any useful combination of the following:
|
||
|
|
||
|
<dl>
|
||
|
<dt><code>-file </code><var>file</var><dt><code>-fi </code><var>file</var><dd>Functions in <var>file</var> will be skipped over when stepping.
|
||
|
|
||
|
<br><dt><code>-gfile </code><var>file-glob-pattern</var><dt><code>-gfi </code><var>file-glob-pattern</var><dd><a name="index-skipping-over-files-via-glob_002dstyle-patterns-378"></a>Functions in files matching <var>file-glob-pattern</var> will be skipped
|
||
|
over when stepping.
|
||
|
|
||
|
<pre class="smallexample"> (gdb) skip -gfi utils/*.c
|
||
|
</pre>
|
||
|
<br><dt><code>-function </code><var>linespec</var><dt><code>-fu </code><var>linespec</var><dd>Functions named by <var>linespec</var> or the function containing the line
|
||
|
named by <var>linespec</var> will be skipped over when stepping.
|
||
|
See <a href="Specify-Location.html#Specify-Location">Specify Location</a>.
|
||
|
|
||
|
<br><dt><code>-rfunction </code><var>regexp</var><dt><code>-rfu </code><var>regexp</var><dd><a name="index-skipping-over-functions-via-regular-expressions-379"></a>Functions whose name matches <var>regexp</var> will be skipped over when stepping.
|
||
|
|
||
|
<p>This form is useful for complex function names.
|
||
|
For example, there is generally no need to step into C<tt>++</tt> <code>std::string</code>
|
||
|
constructors or destructors. Plus with C<tt>++</tt> templates it can be hard to
|
||
|
write out the full name of the function, and often it doesn't matter what
|
||
|
the template arguments are. Specifying the function to be skipped as a
|
||
|
regular expression makes this easier.
|
||
|
|
||
|
<pre class="smallexample"> (gdb) skip -rfu ^std::(allocator|basic_string)<.*>::~?\1 *\(
|
||
|
</pre>
|
||
|
<p>If you want to skip every templated C<tt>++</tt> constructor and destructor
|
||
|
in the <code>std</code> namespace you can do:
|
||
|
|
||
|
<pre class="smallexample"> (gdb) skip -rfu ^std::([a-zA-z0-9_]+)<.*>::~?\1 *\(
|
||
|
</pre>
|
||
|
</dl>
|
||
|
|
||
|
<p>If no options are specified, the function you're currently debugging
|
||
|
will be skipped.
|
||
|
|
||
|
<p><a name="index-skip-function-380"></a><br><dt><code>skip function </code><span class="roman">[</span><var>linespec</var><span class="roman">]</span><dd>After running this command, the function named by <var>linespec</var> or the
|
||
|
function containing the line named by <var>linespec</var> will be skipped over when
|
||
|
stepping. See <a href="Specify-Location.html#Specify-Location">Specify Location</a>.
|
||
|
|
||
|
<p>If you do not specify <var>linespec</var>, the function you're currently debugging
|
||
|
will be skipped.
|
||
|
|
||
|
<p>(If you have a function called <code>file</code> that you want to skip, use
|
||
|
<kbd>skip function file</kbd>.)
|
||
|
|
||
|
<p><a name="index-skip-file-381"></a><br><dt><code>skip file </code><span class="roman">[</span><var>filename</var><span class="roman">]</span><dd>After running this command, any function whose source lives in <var>filename</var>
|
||
|
will be skipped over when stepping.
|
||
|
|
||
|
<pre class="smallexample"> (gdb) skip file boring.c
|
||
|
File boring.c will be skipped when stepping.
|
||
|
</pre>
|
||
|
<p>If you do not specify <var>filename</var>, functions whose source lives in the file
|
||
|
you're currently debugging will be skipped.
|
||
|
</dl>
|
||
|
|
||
|
<p>Skips can be listed, deleted, disabled, and enabled, much like breakpoints.
|
||
|
These are the commands for managing your list of skips:
|
||
|
|
||
|
|
||
|
<a name="index-info-skip-382"></a>
|
||
|
<dl><dt><code>info skip </code><span class="roman">[</span><var>range</var><span class="roman">]</span><dd>Print details about the specified skip(s). If <var>range</var> is not specified,
|
||
|
print a table with details about all functions and files marked for skipping.
|
||
|
<code>info skip</code> prints the following information about each skip:
|
||
|
|
||
|
<dl>
|
||
|
<dt><em>Identifier</em><dd>A number identifying this skip.
|
||
|
<br><dt><em>Enabled or Disabled</em><dd>Enabled skips are marked with ‘<samp><span class="samp">y</span></samp>’.
|
||
|
Disabled skips are marked with ‘<samp><span class="samp">n</span></samp>’.
|
||
|
<br><dt><em>Glob</em><dd>If the file name is a ‘<samp><span class="samp">glob</span></samp>’ pattern this is ‘<samp><span class="samp">y</span></samp>’.
|
||
|
Otherwise it is ‘<samp><span class="samp">n</span></samp>’.
|
||
|
<br><dt><em>File</em><dd>The name or ‘<samp><span class="samp">glob</span></samp>’ pattern of the file to be skipped.
|
||
|
If no file is specified this is ‘<samp><span class="samp"><none></span></samp>’.
|
||
|
<br><dt><em>RE</em><dd>If the function name is a ‘<samp><span class="samp">regular expression</span></samp>’ this is ‘<samp><span class="samp">y</span></samp>’.
|
||
|
Otherwise it is ‘<samp><span class="samp">n</span></samp>’.
|
||
|
<br><dt><em>Function</em><dd>The name or regular expression of the function to skip.
|
||
|
If no function is specified this is ‘<samp><span class="samp"><none></span></samp>’.
|
||
|
</dl>
|
||
|
|
||
|
<p><a name="index-skip-delete-383"></a><br><dt><code>skip delete </code><span class="roman">[</span><var>range</var><span class="roman">]</span><dd>Delete the specified skip(s). If <var>range</var> is not specified, delete all
|
||
|
skips.
|
||
|
|
||
|
<p><a name="index-skip-enable-384"></a><br><dt><code>skip enable </code><span class="roman">[</span><var>range</var><span class="roman">]</span><dd>Enable the specified skip(s). If <var>range</var> is not specified, enable all
|
||
|
skips.
|
||
|
|
||
|
<p><a name="index-skip-disable-385"></a><br><dt><code>skip disable </code><span class="roman">[</span><var>range</var><span class="roman">]</span><dd>Disable the specified skip(s). If <var>range</var> is not specified, disable all
|
||
|
skips.
|
||
|
|
||
|
<p><a name="index-set-debug-skip-386"></a><br><dt><code>set debug skip </code><span class="roman">[</span><code>on|off</code><span class="roman">]</span><dd>Set whether to print the debug output about skipping files and functions.
|
||
|
|
||
|
<p><a name="index-show-debug-skip-387"></a><br><dt><code>show debug skip</code><dd>Show whether the debug output about skipping files and functions is printed.
|
||
|
|
||
|
</dl>
|
||
|
|
||
|
</body></html>
|
||
|
|