1.\" Copyright (c) 1983, 1990, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" @(#)gprof.1 8.1 (Berkeley) 6/6/93 33.\" $FreeBSD$ 34.\" 35.Dd June 20, 2004 36.Dt GPROF 1 37.Os 38.Sh NAME 39.Nm gprof 40.Nd display call graph profile data 41.Sh SYNOPSIS 42.Nm 43.Op Fl abKlLsuz 44.Op Fl C Ar count 45.Op Fl e Ar name 46.Op Fl E Ar name 47.Op Fl f Ar name 48.Op Fl F Ar name 49.Op Fl k Ar fromname toname 50.Op Ar a.out Op Ar a.out.gmon ... 51.Sh DESCRIPTION 52The 53.Nm 54utility produces an execution profile of C, Pascal, or Fortran77 programs. 55The effect of called routines is incorporated in the profile of each caller. 56The profile data is taken from the call graph profile file 57which is created by programs that are compiled with the 58.Fl pg 59option of 60.Xr cc 1 , 61.Xr pc 1 , 62and 63.Xr f77 1 . 64The 65.Fl pg 66option also links in versions of the library routines 67that are compiled for profiling. 68By convention these libraries have their name suffixed with 69.Pa _p , 70i.e., the profiled version of 71.Pa libc.a 72is 73.Pa libc_p.a 74and if you specify libraries directly to the 75compiler or linker you can use 76.Fl l Ns Ar c_p 77instead of 78.Fl l Ns Ar c . 79Read the given object file (the default is 80.Pa a.out) 81and establishes the relation between its symbol table 82and the call graph profile. 83The default graph profile file name is the name 84of the executable with the suffix 85.Pa .gmon 86appended. 87If more than one profile file is specified, 88the 89.Nm 90output shows the sum of the profile information in the given profile files. 91.Pp 92The 93.Nm 94utility calculates the amount of time spent in each routine. 95Next, these times are propagated along the edges of the call graph. 96Cycles are discovered, and calls into a cycle are made to share the time 97of the cycle. 98The first listing shows the functions 99sorted according to the time they represent 100including the time of their call graph descendants. 101Below each function entry is shown its (direct) call graph children, 102and how their times are propagated to this function. 103A similar display above the function shows how this function's time and the 104time of its descendants is propagated to its (direct) call graph parents. 105.Pp 106Cycles are also shown, with an entry for the cycle as a whole and 107a listing of the members of the cycle and their contributions to the 108time and call counts of the cycle. 109.Pp 110Second, a flat profile is given, 111similar to that provided by 112.Xr prof 1 . 113This listing gives the total execution times, the call counts, 114the time in msec or usec the call spent in the routine itself, and 115the time in msec or usec the call spent in the routine itself including 116its descendants. 117.Pp 118Finally, an index of the function names is provided. 119.Pp 120The following options are available: 121.Bl -tag -width indent 122.It Fl a 123Suppress the printing of statically declared functions. 124If this option is given, all relevant information about the static function 125(e.g., time samples, calls to other functions, calls from other functions) 126belongs to the function loaded just before the static function in the 127.Pa a.out 128file. 129.It Fl b 130Suppress the printing of a description of each field in the profile. 131.It Fl C Ar count 132Find a minimal set of arcs that can be broken to eliminate all cycles with 133.Ar count 134or more members. 135Caution: the algorithm used to break cycles is exponential, 136so using this option may cause 137.Nm 138to run for a very long time. 139.It Fl e Ar name 140Suppress the printing of the graph profile entry for routine 141.Ar name 142and all its descendants 143(unless they have other ancestors that aren't suppressed). 144More than one 145.Fl e 146option may be given. 147Only one 148.Ar name 149may be given with each 150.Fl e 151option. 152.It Fl E Ar name 153Suppress the printing of the graph profile entry for routine 154.Ar name 155(and its descendants) as 156.Fl e , 157above, and also excludes the time spent in 158.Ar name 159(and its descendants) from the total and percentage time computations. 160(For example, 161.Fl E 162.Ar mcount 163.Fl E 164.Ar mcleanup 165is the default.) 166.It Fl f Ar name 167Print the graph profile entry of only the specified routine 168.Ar name 169and its descendants. 170More than one 171.Fl f 172option may be given. 173Only one 174.Ar name 175may be given with each 176.Fl f 177option. 178.It Fl F Ar name 179Print the graph profile entry of only the routine 180.Ar name 181and its descendants (as 182.Fl f , 183above) and also uses only the times of the printed routines 184in total time and percentage computations. 185More than one 186.Fl F 187option may be given. 188Only one 189.Ar name 190may be given with each 191.Fl F 192option. 193The 194.Fl F 195option 196overrides 197the 198.Fl E 199option. 200.It Fl k Ar fromname Ar toname 201Will delete any arcs from routine 202.Ar fromname 203to routine 204.Ar toname . 205This can be used to break undesired cycles. 206More than one 207.Fl k 208option may be given. 209Only one pair of routine names may be given with each 210.Fl k 211option. 212.It Fl K 213Gather information about symbols from the currently-running kernel using the 214.Xr sysctl 3 215and 216.Xr kldsym 2 217interfaces. 218This forces the 219.Pa a.out 220argument to be ignored, and allows for symbols in 221.Xr kld 4 222modules to be used. 223.It Fl l 224Suppress the printing of the call-graph profile. 225.It Fl L 226Suppress the printing of the flat profile. 227.It Fl s 228A profile file 229.Pa gmon.sum 230is produced that represents 231the sum of the profile information in all the specified profile files. 232This summary profile file may be given to later 233executions of gprof (probably also with a 234.Fl s ) 235to accumulate profile data across several runs of an 236.Pa a.out 237file. 238.It Fl u 239Suppress the printing of functions whose names are not visible to 240C programs. 241For the ELF object format, this means names that 242contain the 243.Ql .\& 244character. 245For the a.out object format, it means names that do not 246begin with a 247.Ql _ 248character. 249All relevant information about such functions belongs to the 250(non-suppressed) function with the next lowest address. 251This is useful for eliminating "functions" that are just labels 252inside other functions. 253.It Fl z 254Display routines that have zero usage (as shown by call counts 255and accumulated time). 256This is useful with the 257.Fl c 258option for discovering which routines were never called. 259.El 260.Sh FILES 261.Bl -tag -width a.out.gmon -compact 262.It Pa a.out 263The namelist and text space. 264.It Pa a.out.gmon 265Dynamic call graph and profile. 266.It Pa gmon.sum 267Summarized dynamic call graph and profile. 268.El 269.Sh SEE ALSO 270.Xr cc 1 , 271.Xr profil 2 , 272.Xr clocks 7 273.\" .Xr monitor 3 , 274.\" .Xr prof 1 275.Rs 276.%T "An Execution Profiler for Modular Programs" 277.%A S. Graham 278.%A P. Kessler 279.%A M. McKusick 280.%J "Software - Practice and Experience" 281.%V 13 282.%P pp. 671-685 283.%D 1983 284.Re 285.Rs 286.%T "gprof: A Call Graph Execution Profiler" 287.%A S. Graham 288.%A P. Kessler 289.%A M. McKusick 290.%J "Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices" 291.%V 17 292.%N 6 293.%P pp. 120-126 294.%D June 1982 295.Re 296.Sh HISTORY 297The 298.Nm 299profiler 300appeared in 301.Bx 4.2 . 302.Sh BUGS 303The granularity of the sampling is shown, but remains 304statistical at best. 305We assume that the time for each execution of a function 306can be expressed by the total time for the function divided 307by the number of times the function is called. 308Thus the time propagated along the call graph arcs to the function's 309parents is directly proportional to the number of times that 310arc is traversed. 311.Pp 312Parents that are not themselves profiled will have the time of 313their profiled children propagated to them, but they will appear 314to be spontaneously invoked in the call graph listing, and will 315not have their time propagated further. 316Similarly, signal catchers, even though profiled, will appear 317to be spontaneous (although for more obscure reasons). 318Any profiled children of signal catchers should have their times 319propagated properly, unless the signal catcher was invoked during 320the execution of the profiling routine, in which case all is lost. 321.Pp 322The profiled program must call 323.Xr exit 3 324or return normally for the profiling information to be saved 325in the graph profile file. 326