blob: 6bee8355a2ec2c1c9f23e5d69f241757a2566b08 [file] [log] [blame]
<!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, 1992, 1997, 1998, 1999, 2000, 2001, 2003,
2007, 2008, 2009 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: How do I?</title>
<meta name="description" content="GNU gprof: How do I?">
<meta name="keywords" content="GNU gprof: How do I?">
<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="index.html#Top" rel="up" title="Top">
<link href="Incompatibilities.html#Incompatibilities" rel="next" title="Incompatibilities">
<link href="Assumptions.html#Assumptions" rel="prev" title="Assumptions">
<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="How-do-I_003f"></a>
<div class="header">
<p>
Next: <a href="Incompatibilities.html#Incompatibilities" accesskey="n" rel="next">Incompatibilities</a>, Previous: <a href="Inaccuracy.html#Inaccuracy" accesskey="p" rel="prev">Inaccuracy</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="Answers-to-Common-Questions"></a>
<h2 class="chapter">7 Answers to Common Questions</h2>
<dl compact="compact">
<dt>How can I get more exact information about hot spots in my program?</dt>
<dd>
<p>Looking at the per-line call counts only tells part of the story.
Because <code>gprof</code> can only report call times and counts by function,
the best way to get finer-grained information on where the program
is spending its time is to re-factor large functions into sequences
of calls to smaller ones. Beware however that this can introduce
artificial hot spots since compiling with &lsquo;<samp>-pg</samp>&rsquo; adds a significant
overhead to function calls. An alternative solution is to use a
non-intrusive profiler, e.g. oprofile.
</p>
</dd>
<dt>How do I find which lines in my program were executed the most times?</dt>
<dd>
<p>Use the <code>gcov</code> program.
</p>
</dd>
<dt>How do I find which lines in my program called a particular function?</dt>
<dd>
<p>Use &lsquo;<samp>gprof -l</samp>&rsquo; and lookup the function in the call graph.
The callers will be broken down by function and line number.
</p>
</dd>
<dt>How do I analyze a program that runs for less than a second?</dt>
<dd>
<p>Try using a shell script like this one:
</p>
<div class="example">
<pre class="example">for i in `seq 1 100`; do
fastprog
mv gmon.out gmon.out.$i
done
gprof -s fastprog gmon.out.*
gprof fastprog gmon.sum
</pre></div>
<p>If your program is completely deterministic, all the call counts
will be simple multiples of 100 (i.e., a function called once in
each run will appear with a call count of 100).
</p>
</dd>
</dl>
</body>
</html>