Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
GPROF(1)		FreeBSD	General	Commands Manual		      GPROF(1)

     gprof -- display call graph profile data

     gprof [options] [a.out [gmon.out ...]]

     Gprof 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
     (gmon.out default)	which is created by programs that are compiled with
     the -pg option of cc(1), pc(1), and f77(1).  The -pg option also links in
     versions of the library routines that are compiled	for profiling.	Gprof
     reads the given object file (the default is a.out)	and establishes	the
     relation between it's symbol table	and the	call graph profile from
     gmon.out.	If more	than one profile file is specified, the	gprof output
     shows the sum of the profile information in the given profile files.

     Gprof calculates the amount of time spent in each routine.	 Next, these
     times are propagated along	the edges of the call graph.  Cycles are dis-
     covered, 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 func-
     tion shows	how this function's time and the time of its descendents is
     propagated	to its (direct)	call graph parents.

     Cycles are	also shown, with an entry for the cycle	as a whole and a list-
     ing of the	members	of the cycle and their contributions to	the time and
     call counts of the	cycle.

     Second, a flat profile is given, similar to that provided by prof(1).
     This listing gives	the total execution times, the call counts, the	time
     in	msec or	usec the call spent in the routine itself, and the time	in
     msec or usec the call spent in the	routine	itself including its descen-

     Finally, an index of the function names is	provided.

     The following options are available:

     -a		 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 func-
		 tions,	calls from other functions) belongs to the function
		 loaded	just before the	static function	in the a.out file.

     -b		 Suppresses the	printing of a description of each field	in the

     -c		 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

     -C	count	 Find a	minimal	set of arcs that can be	broken to eliminate
		 all cycles with count or more members.	 Caution: the algo-
		 rithm used to break cycles is exponential, so using this
		 option	may cause gprof	to run for a very long time.

     -e	name	 Suppresses the	printing of the	graph profile entry for	rou-
		 tine name and all its descendants (unless they	have other
		 ancestors that	aren't suppressed).  More than one -e option
		 may be	given.	Only one name may be given with	each -e

     -E	name	 Suppresses the	printing of the	graph profile entry for	rou-
		 tine name (and	its descendants) as -e,	above, and also
		 excludes the time spent in name (and its descendants) from
		 the total and percentage time computations.  (For example, -E
		 mcount	-E mcleanup is the default.)

     -f	name	 Prints	the graph profile entry	of only	the specified routine
		 name and its descendants.  More than one -f option may	be
		 given.	 Only one name may be given with each -f option.

     -F	name	 Prints	the graph profile entry	of only	the routine name and
		 its descendants (as -f, above)	and also uses only the times
		 of the	printed	routines in total time and percentage computa-
		 tions.	 More than one -F option may be	given.	Only one name
		 may be	given with each	-F option.  The	-F option overrides
		 the -E	option.

     -k	fromname toname
		 Will delete any arcs from routine fromname to routine toname.
		 This can be used to break undesired cycles.  More than	one -k
		 option	may be given.  Only one	pair of	routine	names may be
		 given with each -k option.

     -l		 Suppresses the	printing of the	call-graph profile.

     -L		 Suppresses the	printing of the	flat profile.

     -s		 A profile file	gmon.sum is produced that represents the sum
		 of the	profile	information in all the specified profile
		 files.	 This summary profile file may be given	to later exe-
		 cutions of gprof (probably also with a	-s) to accumulate pro-
		 file data across several runs of an a.out file.

     -u		 Suppresses the	printing of functions whose name does not
		 begin with an underscore.  All	relevant information about
		 such functions	belongs	to the (non-suppressed)	function with
		 the next lowest address.  This	is useful for eliminating
		 "functions" that are just labels inside other functions.

     -z		 Displays routines that	have zero usage	(as shown by call
		 counts	and accumulated	time).	This is	useful with the	-c
		 option	for discovering	which routines were never called.

     a.out     The namelist and	text space.
     gmon.out  Dynamic call graph and profile.
     gmon.sum  Summarized dynamic call graph and profile.

     monitor(3), profil(2), cc(1), prof(1)

     S.	Graham,	P. Kessler, and	M. McKusick, "An Execution Profiler for
     Modular Programs",	Software - Practice and	Experience, 13,	pp. 671-685,

     S.	Graham,	P. Kessler, and	M. McKusick, "gprof: A Call Graph Execution
     Profiler",	Proceedings of the SIGPLAN '82 Symposium on Compiler
     Construction, SIGPLAN Notices, 6, 17, pp. 120-126,	June 1982.

     The gprof profiler	appeared in 4.2BSD.

     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 num-
     ber of times that arc is traversed.

     Parents that are not themselves profiled will have	the time of their pro-
     filed children propagated to them,	but they will appear to	be sponta-
     neously 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.

     The profiled program must call exit(2) or return normally for the profil-
     ing information to	be saved in the	gmon.out file.

4.2 Berkeley Distribution	 June 6, 1993	     4.2 Berkeley Distribution


Want to link to this manual page? Use this URL:

home | help