|
|
1.1 root 1: .\" Copyright (c) 1983 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)gprof.1 6.3 (Berkeley) 9/30/87
6: .\"
7: .TH GPROF 1 "September 30, 1987"
8: .UC 5
9: .SH NAME
10: gprof \- display call graph profile data
11: .SH SYNOPSIS
12: .B gprof
13: [ options ] [ a.out [ gmon.out ... ] ]
14: .SH DESCRIPTION
15: .I gprof
16: produces an execution profile of C, Pascal, or Fortran77 programs.
17: The effect of called routines is incorporated in the profile of each caller.
18: The profile data is taken from the call graph profile file
19: .RI ( gmon.out
20: default) which is created by programs
21: that are compiled with the
22: .B \-pg
23: option of
24: .IR cc ,
25: .IR pc ,
26: and
27: .IR f77 .
28: The
29: .B \-pg
30: option also links in versions of the library routines
31: that are compiled for profiling.
32: The symbol table in the named object file
33: .RI ( a.out
34: default)
35: is read and correlated with the call graph profile file.
36: If more than one profile file is specified,
37: the
38: .I gprof
39: output shows the sum of the profile information in the given profile files.
40: .PP
41: .I Gprof
42: calculates the amount of time spent in each routine.
43: Next, these times are propagated along the edges of the call graph.
44: Cycles are discovered, and calls into a cycle are made to share the time
45: of the cycle.
46: The first listing shows the functions
47: sorted according to the time they represent
48: including the time of their call graph descendents.
49: Below each function entry is shown its (direct) call graph children,
50: and how their times are propagated to this function.
51: A similar display above the function shows how this function's time and the
52: time of its descendents is propagated to its (direct) call graph parents.
53: .PP
54: Cycles are also shown, with an entry for the cycle as a whole and
55: a listing of the members of the cycle and their contributions to the
56: time and call counts of the cycle.
57: .PP
58: Second, a flat profile is given,
59: similar to that provided by
60: .IR prof (1).
61: This listing gives the total execution times, the call counts,
62: the number of milliseconds per call in the routine itself, and
63: the number of milliseconds per call in the routine itself including
64: its descendents.
65: .PP
66: Finally, an index of the function names is provided.
67: .PP
68: The following options are available:
69: .TP
70: .B \-a
71: suppresses the printing of statically declared functions.
72: If this option is given, all relevant information about the static function
73: .RI ( e.g.,
74: time samples, calls to other functions, calls from other functions)
75: belongs to the function loaded just before the static function in the
76: .I a.out
77: file.
78: .TP
79: .B \-b
80: suppresses the printing of a description of each field in the profile.
81: .TP
82: .B \-c
83: the static call graph of the program is discovered by a heuristic
84: that examines the text space of the object file.
85: Static-only parents or children are shown
86: with call counts of 0.
87: .TP
88: .BI \-e " name"
89: suppresses the printing of the graph profile entry for routine
90: .I name
91: and all its descendants
92: (unless they have other ancestors that aren't suppressed).
93: More than one
94: .B \-e
95: option may be given.
96: Only one
97: .I name
98: may be given with each
99: .B \-e
100: option.
101: .TP
102: .BI \-E " name"
103: suppresses the printing of the graph profile entry for routine
104: .I name
105: (and its descendants) as
106: .BR \-e ,
107: above, and also excludes the time spent in
108: .I name
109: (and its descendants) from the total and percentage time computations.
110: (For example,
111: .B \-E
112: .I mcount
113: .B \-E
114: .I mcleanup
115: is the default.)
116: .TP
117: .BI \-f " name"
118: prints the graph profile entry of only the specified routine
119: .I name
120: and its descendants.
121: More than one
122: .B \-f
123: option may be given.
124: Only one
125: .I name
126: may be given with each
127: .B \-f
128: option.
129: .TP
130: .BI \-F " name"
131: prints the graph profile entry of only the routine
132: .I name
133: and its descendants (as
134: .BR \-f,
135: above) and also uses only the times of the printed routines
136: in total time and percentage computations.
137: More than one
138: .B \-F
139: option may be given.
140: Only one
141: .I name
142: may be given with each
143: .B \-F
144: option.
145: The
146: .B \-F
147: option
148: overrides
149: the
150: .B \-E
151: option.
152: .TP
153: .BI \-k " fromname toname"
154: will delete any arcs from routine
155: .I fromname
156: to routine
157: .IR toname .
158: This can be used to break undesired cycles.
159: More than one
160: .B \-k
161: option may be given.
162: Only one pair of routine names may be given with each
163: .B \-k
164: option.
165: .TP
166: .B \-s
167: a profile file
168: .I gmon.sum
169: is produced that represents
170: the sum of the profile information in all the specified profile files.
171: This summary profile file may be given to later
172: executions of gprof (probably also with a
173: .BR \-s )
174: to accumulate profile data across several runs of an
175: .I a.out
176: file.
177: .TP
178: .B \-z
179: displays routines that have zero usage (as shown by call counts
180: and accumulated time).
181: This is useful with the
182: .B \-c
183: option for discovering which routines were never called.
184: .SH FILES
185: .ta 1.5i
186: .I a.out
187: the namelist and text space.
188: .br
189: .I gmon.out
190: dynamic call graph and profile.
191: .br
192: .I gmon.sum
193: summarized dynamic call graph and profile.
194: .SH "SEE ALSO"
195: monitor(3), profil(2), cc(1), prof(1)
196: .br
197: ``gprof: A Call Graph Execution Profiler'', by
198: Graham, S.L., Kessler, P.B., McKusick, M.K.;
199: .IR "Proceedings of the SIGPLAN '82 Symposium on Compiler Construction" ,
200: SIGPLAN Notices, Vol. 17, No. 6, pp. 120-126, June 1982.
201: .SH BUGS
202: Beware of quantization errors.
203: The granularity of the sampling is shown, but remains
204: statistical at best.
205: We assume that the time for each execution of a function
206: can be expressed by the total time for the function divided
207: by the number of times the function is called.
208: Thus the time propagated along the call graph arcs to the function's
209: parents is directly proportional to the number of times that
210: arc is traversed.
211: .PP
212: Parents that are not themselves profiled will have the time of
213: their profiled children propagated to them, but they will appear
214: to be spontaneously invoked in the call graph listing, and will
215: not have their time propagated further.
216: Similarly, signal catchers, even though profiled, will appear
217: to be spontaneous (although for more obscure reasons).
218: Any profiled children of signal catchers should have their times
219: propagated properly, unless the signal catcher was invoked during
220: the execution of the profiling routine, in which case all is lost.
221: .PP
222: The profiled program must call
223: .IR exit (2)
224: or return normally for the profiling information to be saved
225: in the gmon.out file.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.