2000-12-07 Kazu Hirata <kazu@hxi.com>
[deliverable/binutils-gdb.git] / gprof / gprof.1
CommitLineData
252b5132
RH
1.\" Copyright (c) 1983, 1990 The Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms are permitted provided
5.\" that: (1) source distributions retain this entire copyright notice and
6.\" comment, and (2) distributions including binaries display the following
7.\" acknowledgement: ``This product includes software developed by the
8.\" University of California, Berkeley and its contributors'' in the
9.\" documentation or other materials provided with the distribution and in
10.\" all advertising materials mentioning features or use of this software.
11.\" Neither the name of the University nor the names of its contributors may
12.\" be used to endorse or promote products derived from this software without
13.\" specific prior written permission.
14.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
15.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
16.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17.\"
18.\" @(#)gprof.1 6.6 (Berkeley) 7/24/90
19.\"
20.TH GPROF 1 "January 29, 1993"
21.SH NAME
22gprof \- display call graph profile data
23.SH SYNOPSIS
24.B gprof [ \-abcsz ] [ \-e|\-E
25.I name
26.B ] [ \-f|\-F
27.I name
28.B ]
29.B [ \-k
30.I fromname toname
31.B ] [
32.I objfile
33.B [
34.I gmon.out
35.B ]
36.B ]
37.SH DESCRIPTION
38.B gprof
39produces an execution profile of C, Pascal, or Fortran77 programs.
40The effect of called routines is incorporated in the profile of each caller.
41The profile data is taken from the call graph profile file
42\&(`gmon.out' default) which is created by programs
43that are compiled with the
44.B \-pg
45option of
46.BR cc ( 1 ) ,
47.BR pc ( 1 ) ,
48and
49.BR f77 ( 1 ) .
50The
51.B \-pg
52option also links in versions of the library routines
53that are compiled for profiling.
54.B Gprof
55reads the given object file (the default is `a.out')
56and establishes the relation between its symbol table
57and the call graph profile from `gmon.out'.
58If more than one profile file is specified,
59the
60.B gprof
61output shows the sum of the profile information in the given profile files.
62.PP
63.B Gprof
64calculates the amount of time spent in each routine.
65Next, these times are propagated along the edges of the call graph.
66Cycles are discovered, and calls into a cycle are made to share the time
67of the cycle.
68The first listing shows the functions
69sorted according to the time they represent
70including the time of their call graph descendants.
71Below each function entry is shown its (direct) call graph children,
72and how their times are propagated to this function.
73A similar display above the function shows how this function's time and the
74time of its descendants is propagated to its (direct) call graph parents.
75.PP
76Cycles are also shown, with an entry for the cycle as a whole and
77a listing of the members of the cycle and their contributions to the
78time and call counts of the cycle.
79.PP
80Second, a flat profile is given,
81similar to that provided by
82.BR prof ( 1 ) .
83This listing gives the total execution times, the call counts,
84the time in milliseconds the call spent in the routine itself, and
85the time in milliseconds the call spent in the routine itself including
86its descendants.
87.PP
88Finally, an index of the function names is provided.
89.SH OPTIONS
90The following options are available:
91.TP
92.B \-a
93suppresses the printing of statically declared functions.
94If this option is given, all relevant information about the static function
95(e.g., time samples, calls to other functions, calls from other functions)
96belongs to the function loaded just before the static function in the
97\&`objfile' file.
98.TP
99.B \-b
100suppresses the printing of a description of each field in the profile.
101.TP
102.B \-c
103the static call graph of the program is discovered by a heuristic
104that examines the text space of the object file.
105Static-only parents or children are shown
106with call counts of 0.
107.TP
108.BI "\-e " name
109suppresses the printing of the graph profile entry for routine
110.I name
111and all its descendants
112(unless they have other ancestors that aren't suppressed).
113More than one
114.B \-e
115option may be given.
116Only one
117.I name
118may be given with each
119.B \-e
120option.
121.TP
122.BI "\-E " name
123suppresses the printing of the graph profile entry for routine
124.I name
125(and its descendants) as
126.B \-e ,
127above, and also excludes the time spent in
128.I name
129(and its descendants) from the total and percentage time computations.
130(For example,
131.BI "\-E " mcount
132.BI "\-E " mcleanup
133is the default.)
134.TP
135.BI "\-f " name
136prints the graph profile entry of only the specified routine
137.I name
138and its descendants.
139More than one
140.B \-f
141option may be given.
142Only one
143.I name
144may be given with each
145.B \-f
146option.
147.TP
148.BI "\-F " name
149prints the graph profile entry of only the routine
150.I name
151and its descendants (as
152.B \-f ,
153above) and also uses only the times of the printed routines
154in total time and percentage computations.
155More than one
156.B \-F
157option may be given.
158Only one
159.I name
160may be given with each
161.B \-F
162option.
163The
164.B \-F
165option
166overrides
167the
168.B \-E
169option.
170.TP
171.BI "\-k " "fromname toname"
172will delete any arcs from routine
173.I fromname
174to routine
175.IR toname .
176This can be used to break undesired cycles.
177More than one
178.B \-k
179option may be given.
180Only one pair of routine names may be given with each
181.B \-k
182option.
183.TP
184.B \-s
185a profile file `gmon.sum' is produced that represents
186the sum of the profile information in all the specified profile files.
187This summary profile file may be given to later
188executions of gprof (probably also with a
189.BR \-s )
190to accumulate profile data across several runs of an `objfile' file.
191.TP
192.B -v
193prints the version number for gprof, and then exits.
194.TP
195.B -z
196displays routines that have zero usage (as shown by call counts
197and accumulated time).
198This is useful with the
199.B \-c
200option for discovering which routines were never called.
201.PP
202.SH FILES
203.ta \w'gmon.sum 'u
204a.out the namelist and text space.
205.br
206gmon.out dynamic call graph and profile.
207.br
208gmon.sum summarized dynamic call graph and profile.
209.SH SEE ALSO
210.BR monitor ( 3 ) ,
211.BR profil ( 2 ) ,
212.BR cc ( 1 ) ,
213.BR prof ( 1 )
214.sp
215``An Execution Profiler for Modular Programs'',
216by S. Graham, P. Kessler, M. McKusick;
217.I
218Software \- Practice and Experience,
219Vol. 13, pp. 671-685, 1983.
220.sp
221``gprof: A Call Graph Execution Profiler'',
222by S. Graham, P. Kessler, M. McKusick;
223.I
224Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
225SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June 1982.
226.SH HISTORY
227.B Gprof
228appeared in 4.2 BSD.
229.SH BUGS
230The granularity of the sampling is shown, but remains
231statistical at best.
232We assume that the time for each execution of a function
233can be expressed by the total time for the function divided
234by the number of times the function is called.
235Thus the time propagated along the call graph arcs to the function's
236parents is directly proportional to the number of times that
237arc is traversed.
238.PP
239Parents that are not themselves profiled will have the time of
240their profiled children propagated to them, but they will appear
241to be spontaneously invoked in the call graph listing, and will
242not have their time propagated further.
243Similarly, signal catchers, even though profiled, will appear
244to be spontaneous (although for more obscure reasons).
245Any profiled children of signal catchers should have their times
246propagated properly, unless the signal catcher was invoked during
247the execution of the profiling routine, in which case all is lost.
248.PP
249The profiled program must call
250.BR exit ( 2 )
251or return normally for the profiling information to be saved
252in the `gmon.out' file.
This page took 0.063401 seconds and 4 git commands to generate.