<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This file documents the gprof profiler of the GNU system.

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 no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled "GNU Free Documentation License".
 -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU gprof: Annotated Source</title>

<meta name="description" content="GNU gprof: Annotated Source">
<meta name="keywords" content="GNU gprof: Annotated Source">
<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="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Output.html#Output" rel="up" title="Output">
<link href="Inaccuracy.html#Inaccuracy" rel="next" title="Inaccuracy">
<link href="Line_002dby_002dline.html#Line_002dby_002dline" rel="prev" title="Line-by-line">
<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="Annotated-Source"></a>
<div class="header">
<p>
Previous: <a href="Line_002dby_002dline.html#Line_002dby_002dline" accesskey="p" rel="prev">Line-by-line</a>, Up: <a href="Output.html#Output" accesskey="u" rel="up">Output</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="The-Annotated-Source-Listing"></a>
<h3 class="section">5.4 The Annotated Source Listing</h3>

<p><code>gprof</code>&rsquo;s &lsquo;<samp>-A</samp>&rsquo; option triggers an annotated source listing,
which lists the program&rsquo;s source code, each function labeled with the
number of times it was called.  You may also need to specify the
&lsquo;<samp>-I</samp>&rsquo; option, if <code>gprof</code> can&rsquo;t find the source code files.
</p>
<p>With older versions of <code>gcc</code> compiling with &lsquo;<samp>gcc &hellip; -g
-pg -a</samp>&rsquo; augments your program with basic-block counting code, in
addition to function counting code.  This enables <code>gprof</code> to
determine how many times each line of code was executed.  With newer
versions of <code>gcc</code> support for displaying basic-block counts is
provided by the <code>gcov</code> program.
</p>
<p>For example, consider the following function, taken from gzip,
with line numbers added:
</p>
<div class="smallexample">
<pre class="smallexample"> 1 ulg updcrc(s, n)
 2     uch *s;
 3     unsigned n;
 4 {
 5     register ulg c;
 6
 7     static ulg crc = (ulg)0xffffffffL;
 8
 9     if (s == NULL) {
10         c = 0xffffffffL;
11     } else {
12         c = crc;
13         if (n) do {
14             c = crc_32_tab[...];
15         } while (--n);
16     }
17     crc = c;
18     return c ^ 0xffffffffL;
19 }

</pre></div>

<p><code>updcrc</code> has at least five basic-blocks.
One is the function itself.  The
<code>if</code> statement on line 9 generates two more basic-blocks, one
for each branch of the <code>if</code>.  A fourth basic-block results from
the <code>if</code> on line 13, and the contents of the <code>do</code> loop form
the fifth basic-block.  The compiler may also generate additional
basic-blocks to handle various special cases.
</p>
<p>A program augmented for basic-block counting can be analyzed with
&lsquo;<samp>gprof -l -A</samp>&rsquo;.
The &lsquo;<samp>-x</samp>&rsquo; option is also helpful,
to ensure that each line of code is labeled at least once.
Here is <code>updcrc</code>&rsquo;s
annotated source listing for a sample <code>gzip</code> run:
</p>
<div class="smallexample">
<pre class="smallexample">                ulg updcrc(s, n)
                    uch *s;
                    unsigned n;
            2 -&gt;{
                    register ulg c;
                
                    static ulg crc = (ulg)0xffffffffL;
                
            2 -&gt;    if (s == NULL) {
            1 -&gt;        c = 0xffffffffL;
            1 -&gt;    } else {
            1 -&gt;        c = crc;
            1 -&gt;        if (n) do {
        26312 -&gt;            c = crc_32_tab[...];
26312,1,26311 -&gt;        } while (--n);
                    }
            2 -&gt;    crc = c;
            2 -&gt;    return c ^ 0xffffffffL;
            2 -&gt;}
</pre></div>

<p>In this example, the function was called twice, passing once through
each branch of the <code>if</code> statement.  The body of the <code>do</code>
loop was executed a total of 26312 times.  Note how the <code>while</code>
statement is annotated.  It began execution 26312 times, once for
each iteration through the loop.  One of those times (the last time)
it exited, while it branched back to the beginning of the loop 26311 times.
</p>
<hr>
<div class="header">
<p>
Previous: <a href="Line_002dby_002dline.html#Line_002dby_002dline" accesskey="p" rel="prev">Line-by-line</a>, Up: <a href="Output.html#Output" accesskey="u" rel="up">Output</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>



</body>
</html>
