1991-07-18 22:19:17 +02:00
|
|
|
.\" Copyright (c) 1983, 1990 The Regents of the University of California.
|
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms are permitted provided
|
|
|
|
.\" that: (1) source distributions retain this entire copyright notice and
|
|
|
|
.\" comment, and (2) distributions including binaries display the following
|
|
|
|
.\" acknowledgement: ``This product includes software developed by the
|
|
|
|
.\" University of California, Berkeley and its contributors'' in the
|
|
|
|
.\" documentation or other materials provided with the distribution and in
|
|
|
|
.\" all advertising materials mentioning features or use of this software.
|
|
|
|
.\" Neither the name of the University nor the names of its contributors may
|
|
|
|
.\" be used to endorse or promote products derived from this software without
|
|
|
|
.\" specific prior written permission.
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
|
|
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
|
|
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
.\"
|
|
|
|
.\" @(#)gprof.1 6.6 (Berkeley) 7/24/90
|
|
|
|
.\"
|
1993-01-30 00:47:33 +01:00
|
|
|
.TH GPROF 1 "January 29, 1993"
|
1992-07-20 02:48:14 +02:00
|
|
|
.SH NAME
|
|
|
|
gprof \- display call graph profile data
|
|
|
|
.SH SYNOPSIS
|
1992-10-09 19:34:33 +01:00
|
|
|
.B gprof [ \-abcsz ] [ \-e|\-E
|
|
|
|
.I name
|
|
|
|
.B ] [ \-f|\-F
|
|
|
|
.I name
|
|
|
|
.B ]
|
|
|
|
.B [ \-k
|
|
|
|
.I fromname toname
|
|
|
|
.B ] [
|
1993-01-30 00:47:33 +01:00
|
|
|
.I objfile
|
1992-10-09 19:34:33 +01:00
|
|
|
.B [
|
|
|
|
.I gmon.out
|
|
|
|
.B ]
|
|
|
|
.B ]
|
1992-07-20 02:48:14 +02:00
|
|
|
.SH DESCRIPTION
|
|
|
|
.B gprof
|
1991-07-18 22:19:17 +02:00
|
|
|
produces an execution profile of C, Pascal, or Fortran77 programs.
|
|
|
|
The effect of called routines is incorporated in the profile of each caller.
|
|
|
|
The profile data is taken from the call graph profile file
|
1992-07-20 02:48:14 +02:00
|
|
|
\&(`gmon.out' default) which is created by programs
|
1991-07-18 22:19:17 +02:00
|
|
|
that are compiled with the
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-pg
|
1991-07-18 22:19:17 +02:00
|
|
|
option of
|
1992-07-20 02:48:14 +02:00
|
|
|
.BR cc ( 1 ) ,
|
|
|
|
.BR pc ( 1 ) ,
|
1991-07-18 22:19:17 +02:00
|
|
|
and
|
1992-07-20 02:48:14 +02:00
|
|
|
.BR f77 ( 1 ) .
|
1991-07-18 22:19:17 +02:00
|
|
|
The
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-pg
|
1991-07-18 22:19:17 +02:00
|
|
|
option also links in versions of the library routines
|
|
|
|
that are compiled for profiling.
|
1992-07-20 02:48:14 +02:00
|
|
|
.B Gprof
|
|
|
|
reads the given object file (the default is `a.out')
|
|
|
|
and establishes the relation between its symbol table
|
|
|
|
and the call graph profile from `gmon.out'.
|
1991-07-18 22:19:17 +02:00
|
|
|
If more than one profile file is specified,
|
|
|
|
the
|
1992-07-20 02:48:14 +02:00
|
|
|
.B gprof
|
1991-07-18 22:19:17 +02:00
|
|
|
output shows the sum of the profile information in the given profile files.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
|
|
|
.B Gprof
|
1991-07-18 22:19:17 +02:00
|
|
|
calculates the amount of time spent in each routine.
|
|
|
|
Next, these times are propagated along the edges of the call graph.
|
|
|
|
Cycles are discovered, and calls into a cycle are made to share the time
|
|
|
|
of the cycle.
|
|
|
|
The first listing shows the functions
|
|
|
|
sorted according to the time they represent
|
|
|
|
including the time of their call graph descendents.
|
|
|
|
Below each function entry is shown its (direct) call graph children,
|
|
|
|
and how their times are propagated to this function.
|
|
|
|
A similar display above the function shows how this function's time and the
|
|
|
|
time of its descendents is propagated to its (direct) call graph parents.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
1991-07-18 22:19:17 +02:00
|
|
|
Cycles are also shown, with an entry for the cycle as a whole and
|
|
|
|
a listing of the members of the cycle and their contributions to the
|
|
|
|
time and call counts of the cycle.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
1991-07-18 22:19:17 +02:00
|
|
|
Second, a flat profile is given,
|
|
|
|
similar to that provided by
|
1992-07-20 02:48:14 +02:00
|
|
|
.BR prof ( 1 ) .
|
1991-07-18 22:19:17 +02:00
|
|
|
This listing gives the total execution times, the call counts,
|
|
|
|
the time in milleseconds the call spent in the routine itself, and
|
|
|
|
the time in milleseconds the call spent in the routine itself including
|
|
|
|
its descendents.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
1991-07-18 22:19:17 +02:00
|
|
|
Finally, an index of the function names is provided.
|
1992-07-20 02:48:14 +02:00
|
|
|
.SH OPTIONS
|
1991-07-18 22:19:17 +02:00
|
|
|
The following options are available:
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.B \-a
|
1991-07-18 22:19:17 +02:00
|
|
|
suppresses the printing of statically declared functions.
|
|
|
|
If this option is given, all relevant information about the static function
|
|
|
|
(e.g., time samples, calls to other functions, calls from other functions)
|
|
|
|
belongs to the function loaded just before the static function in the
|
1993-01-30 00:47:33 +01:00
|
|
|
\&`objfile' file.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.B \-b
|
1991-07-18 22:19:17 +02:00
|
|
|
suppresses the printing of a description of each field in the profile.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.B \-c
|
1991-07-18 22:19:17 +02:00
|
|
|
the static call graph of the program is discovered by a heuristic
|
|
|
|
that examines the text space of the object file.
|
|
|
|
Static-only parents or children are shown
|
|
|
|
with call counts of 0.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.BI "\-e " name
|
1991-07-18 22:19:17 +02:00
|
|
|
suppresses the printing of the graph profile entry for routine
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
and all its descendants
|
|
|
|
(unless they have other ancestors that aren't suppressed).
|
|
|
|
More than one
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-e
|
1991-07-18 22:19:17 +02:00
|
|
|
option may be given.
|
|
|
|
Only one
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
may be given with each
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-e
|
1991-07-18 22:19:17 +02:00
|
|
|
option.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.BI "\-E " name
|
1991-07-18 22:19:17 +02:00
|
|
|
suppresses the printing of the graph profile entry for routine
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
(and its descendants) as
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-e ,
|
1991-07-18 22:19:17 +02:00
|
|
|
above, and also excludes the time spent in
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
(and its descendants) from the total and percentage time computations.
|
|
|
|
(For example,
|
1992-07-20 02:48:14 +02:00
|
|
|
.BI "\-E " mcount
|
|
|
|
.BI "\-E " mcleanup
|
1991-07-18 22:19:17 +02:00
|
|
|
is the default.)
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.BI "\-f " name
|
1991-07-18 22:19:17 +02:00
|
|
|
prints the graph profile entry of only the specified routine
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
and its descendants.
|
|
|
|
More than one
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-f
|
1991-07-18 22:19:17 +02:00
|
|
|
option may be given.
|
|
|
|
Only one
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
may be given with each
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-f
|
1991-07-18 22:19:17 +02:00
|
|
|
option.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.BI "\-F " name
|
1991-07-18 22:19:17 +02:00
|
|
|
prints the graph profile entry of only the routine
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
and its descendants (as
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-f ,
|
1991-07-18 22:19:17 +02:00
|
|
|
above) and also uses only the times of the printed routines
|
|
|
|
in total time and percentage computations.
|
|
|
|
More than one
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-F
|
1991-07-18 22:19:17 +02:00
|
|
|
option may be given.
|
|
|
|
Only one
|
1992-07-20 02:48:14 +02:00
|
|
|
.I name
|
1991-07-18 22:19:17 +02:00
|
|
|
may be given with each
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-F
|
1991-07-18 22:19:17 +02:00
|
|
|
option.
|
|
|
|
The
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-F
|
1991-07-18 22:19:17 +02:00
|
|
|
option
|
|
|
|
overrides
|
|
|
|
the
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-E
|
1991-07-18 22:19:17 +02:00
|
|
|
option.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.BI "\-k " "fromname toname"
|
1991-07-18 22:19:17 +02:00
|
|
|
will delete any arcs from routine
|
1992-07-20 02:48:14 +02:00
|
|
|
.I fromname
|
1991-07-18 22:19:17 +02:00
|
|
|
to routine
|
1992-07-20 02:48:14 +02:00
|
|
|
.IR toname .
|
1991-07-18 22:19:17 +02:00
|
|
|
This can be used to break undesired cycles.
|
|
|
|
More than one
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-k
|
1991-07-18 22:19:17 +02:00
|
|
|
option may be given.
|
|
|
|
Only one pair of routine names may be given with each
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-k
|
1991-07-18 22:19:17 +02:00
|
|
|
option.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.B \-s
|
|
|
|
a profile file `gmon.sum' is produced that represents
|
1991-07-18 22:19:17 +02:00
|
|
|
the sum of the profile information in all the specified profile files.
|
|
|
|
This summary profile file may be given to later
|
|
|
|
executions of gprof (probably also with a
|
1992-07-20 02:48:14 +02:00
|
|
|
.BR \-s )
|
1993-01-30 00:47:33 +01:00
|
|
|
to accumulate profile data across several runs of an `objfile' file.
|
1992-07-20 02:48:14 +02:00
|
|
|
.TP
|
|
|
|
.B -z
|
1991-07-18 22:19:17 +02:00
|
|
|
displays routines that have zero usage (as shown by call counts
|
|
|
|
and accumulated time).
|
|
|
|
This is useful with the
|
1992-07-20 02:48:14 +02:00
|
|
|
.B \-c
|
1991-07-18 22:19:17 +02:00
|
|
|
option for discovering which routines were never called.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
|
|
|
.SH FILES
|
|
|
|
.ta \w'gmon.sum 'u
|
|
|
|
a.out the namelist and text space.
|
1991-07-18 22:19:17 +02:00
|
|
|
.br
|
1992-07-20 02:48:14 +02:00
|
|
|
gmon.out dynamic call graph and profile.
|
1991-07-18 22:19:17 +02:00
|
|
|
.br
|
1992-07-20 02:48:14 +02:00
|
|
|
gmon.sum summarized dynamic call graph and profile.
|
|
|
|
.SH SEE ALSO
|
|
|
|
.BR monitor ( 3 ) ,
|
|
|
|
.BR profil ( 2 ) ,
|
|
|
|
.BR cc ( 1 ) ,
|
|
|
|
.BR prof ( 1 )
|
|
|
|
.sp
|
|
|
|
``An Execution Profiler for Modular Programs'',
|
|
|
|
by S. Graham, P. Kessler, M. McKusick;
|
|
|
|
.I
|
|
|
|
Software \- Practice and Experience,
|
|
|
|
Vol. 13, pp. 671-685, 1983.
|
|
|
|
.sp
|
|
|
|
``gprof: A Call Graph Execution Profiler'',
|
1991-07-18 22:19:17 +02:00
|
|
|
by S. Graham, P. Kessler, M. McKusick;
|
1992-07-20 02:48:14 +02:00
|
|
|
.I
|
1991-07-18 22:19:17 +02:00
|
|
|
Proceedings of the SIGPLAN '82 Symposium on Compiler Construction,
|
|
|
|
SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June 1982.
|
1992-07-20 02:48:14 +02:00
|
|
|
.SH HISTORY
|
|
|
|
.B Gprof
|
1991-07-18 22:19:17 +02:00
|
|
|
appeared in 4.2 BSD.
|
1992-07-20 02:48:14 +02:00
|
|
|
.SH BUGS
|
1991-07-18 22:19:17 +02:00
|
|
|
The granularity of the sampling is shown, but remains
|
|
|
|
statistical at best.
|
|
|
|
We assume that the time for each execution of a function
|
|
|
|
can be expressed by the total time for the function divided
|
|
|
|
by the number of times the function is called.
|
|
|
|
Thus the time propagated along the call graph arcs to the function's
|
|
|
|
parents is directly proportional to the number of times that
|
|
|
|
arc is traversed.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
1991-07-18 22:19:17 +02:00
|
|
|
Parents that are not themselves profiled will have the time of
|
|
|
|
their profiled children propagated to them, but they will appear
|
|
|
|
to be spontaneously invoked in the call graph listing, and will
|
|
|
|
not have their time propagated further.
|
|
|
|
Similarly, signal catchers, even though profiled, will appear
|
|
|
|
to be spontaneous (although for more obscure reasons).
|
|
|
|
Any profiled children of signal catchers should have their times
|
|
|
|
propagated properly, unless the signal catcher was invoked during
|
|
|
|
the execution of the profiling routine, in which case all is lost.
|
1992-07-20 02:48:14 +02:00
|
|
|
.PP
|
1991-07-18 22:19:17 +02:00
|
|
|
The profiled program must call
|
1992-07-20 02:48:14 +02:00
|
|
|
.BR exit ( 2 )
|
1991-07-18 22:19:17 +02:00
|
|
|
or return normally for the profiling information to be saved
|
1992-07-20 02:48:14 +02:00
|
|
|
in the `gmon.out' file.
|