|
|
1.1 ! root 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: .Dd July 24, 1990 ! 21: .Dt GPROF 1 ! 22: .Os BSD 4.2 ! 23: .Sh NAME ! 24: .Nm gprof ! 25: .Nd display call graph profile data ! 26: .Sh SYNOPSIS ! 27: .Nm gprof ! 28: .Op options ! 29: .Op Ar a.out Op Ar gmon.out ... ! 30: .Sh DESCRIPTION ! 31: .Nm gprof ! 32: produces an execution profile of C, Pascal, or Fortran77 programs. ! 33: The effect of called routines is incorporated in the profile of each caller. ! 34: The profile data is taken from the call graph profile file ! 35: .Pf \&( Pa gmon.out ! 36: default) which is created by programs ! 37: that are compiled with the ! 38: .Fl pg ! 39: option of ! 40: .Xr cc 1 , ! 41: .Xr pc 1 , ! 42: and ! 43: .Xr f77 1 . ! 44: The ! 45: .Fl pg ! 46: option also links in versions of the library routines ! 47: that are compiled for profiling. ! 48: .Nm Gprof ! 49: reads the given object file (the default is ! 50: .Pa a.out) ! 51: and establishes the relation between it's symbol table ! 52: and the call graph profile from ! 53: .Pa gmon.out . ! 54: If more than one profile file is specified, ! 55: the ! 56: .Nm gprof ! 57: output shows the sum of the profile information in the given profile files. ! 58: .Pp ! 59: .Nm Gprof ! 60: calculates the amount of time spent in each routine. ! 61: Next, these times are propagated along the edges of the call graph. ! 62: Cycles are discovered, and calls into a cycle are made to share the time ! 63: of the cycle. ! 64: The first listing shows the functions ! 65: sorted according to the time they represent ! 66: including the time of their call graph descendents. ! 67: Below each function entry is shown its (direct) call graph children, ! 68: and how their times are propagated to this function. ! 69: A similar display above the function shows how this function's time and the ! 70: time of its descendents is propagated to its (direct) call graph parents. ! 71: .Pp ! 72: Cycles are also shown, with an entry for the cycle as a whole and ! 73: a listing of the members of the cycle and their contributions to the ! 74: time and call counts of the cycle. ! 75: .Pp ! 76: Second, a flat profile is given, ! 77: similar to that provided by ! 78: .Xr prof 1 . ! 79: This listing gives the total execution times, the call counts, ! 80: the time in milleseconds the call spent in the routine itself, and ! 81: the time in milleseconds the call spent in the routine itself including ! 82: its descendents. ! 83: .Pp ! 84: Finally, an index of the function names is provided. ! 85: .Pp ! 86: The following options are available: ! 87: .Tw Fl ! 88: .Tp Fl a ! 89: suppresses the printing of statically declared functions. ! 90: If this option is given, all relevant information about the static function ! 91: (e.g., time samples, calls to other functions, calls from other functions) ! 92: belongs to the function loaded just before the static function in the ! 93: .Pa a.out ! 94: file. ! 95: .Tp Fl b ! 96: suppresses the printing of a description of each field in the profile. ! 97: .Tp Fl c ! 98: the static call graph of the program is discovered by a heuristic ! 99: that examines the text space of the object file. ! 100: Static-only parents or children are shown ! 101: with call counts of 0. ! 102: .Tc Fl e ! 103: .Ws ! 104: .Ar name ! 105: .Cx ! 106: suppresses the printing of the graph profile entry for routine ! 107: .Ar name ! 108: and all its descendants ! 109: (unless they have other ancestors that aren't suppressed). ! 110: More than one ! 111: .Fl e ! 112: option may be given. ! 113: Only one ! 114: .Ar name ! 115: may be given with each ! 116: .Fl e ! 117: option. ! 118: .Tc Fl E ! 119: .Ws ! 120: .Ar name ! 121: .Cx ! 122: suppresses the printing of the graph profile entry for routine ! 123: .Ar name ! 124: (and its descendants) as ! 125: .Fl e , ! 126: above, and also excludes the time spent in ! 127: .Ar name ! 128: (and its descendants) from the total and percentage time computations. ! 129: (For example, ! 130: .Fl E ! 131: .Ar mcount ! 132: .Fl E ! 133: .Ar mcleanup ! 134: is the default.) ! 135: .Tc Fl f ! 136: .Ws ! 137: .Ar name ! 138: .Cx ! 139: prints the graph profile entry of only the specified routine ! 140: .Ar name ! 141: and its descendants. ! 142: More than one ! 143: .Fl f ! 144: option may be given. ! 145: Only one ! 146: .Ar name ! 147: may be given with each ! 148: .Fl f ! 149: option. ! 150: .Tc Fl F ! 151: .Ws ! 152: .Ar name ! 153: .Cx ! 154: prints the graph profile entry of only the routine ! 155: .Ar name ! 156: and its descendants (as ! 157: .Fl f , ! 158: above) and also uses only the times of the printed routines ! 159: in total time and percentage computations. ! 160: More than one ! 161: .Fl F ! 162: option may be given. ! 163: Only one ! 164: .Ar name ! 165: may be given with each ! 166: .Fl F ! 167: option. ! 168: The ! 169: .Fl F ! 170: option ! 171: overrides ! 172: the ! 173: .Fl E ! 174: option. ! 175: .Tc Fl k ! 176: .Ws ! 177: .Ar fromname ! 178: .Ws ! 179: .Ar toname ! 180: .Cx ! 181: will delete any arcs from routine ! 182: .Ar fromname ! 183: to routine ! 184: .Ar toname . ! 185: This can be used to break undesired cycles. ! 186: More than one ! 187: .Fl k ! 188: option may be given. ! 189: Only one pair of routine names may be given with each ! 190: .Fl k ! 191: option. ! 192: .Tp Fl s ! 193: a profile file ! 194: .Pa gmon.sum ! 195: is produced that represents ! 196: the sum of the profile information in all the specified profile files. ! 197: This summary profile file may be given to later ! 198: executions of gprof (probably also with a ! 199: .Fl s ) ! 200: to accumulate profile data across several runs of an ! 201: .Pa a.out ! 202: file. ! 203: .Tp Fl z ! 204: displays routines that have zero usage (as shown by call counts ! 205: and accumulated time). ! 206: This is useful with the ! 207: .Fl c ! 208: option for discovering which routines were never called. ! 209: .Tp ! 210: .Sh FILES ! 211: .Dw gmon.sum ! 212: .Di L ! 213: .Dp Pa a.out ! 214: the namelist and text space. ! 215: .Dp Pa gmon.out ! 216: dynamic call graph and profile. ! 217: .Dp Pa gmon.sum ! 218: summarized dynamic call graph and profile. ! 219: .Dp ! 220: .Sh SEE ALSO ! 221: .Xr monitor 3 , ! 222: .Xr profil 2 , ! 223: .Xr cc 1 , ! 224: .Xr prof 1 ! 225: .br ! 226: .Em An Execution Profiler for Modular Programs , ! 227: by ! 228: S. Graham, P. Kessler, M. McKusick; ! 229: Software - Practice and Experience, ! 230: Vol. 13, pp. 671-685, 1983. ! 231: .br ! 232: .Em gprof: A Call Graph Execution Profiler , ! 233: by S. Graham, P. Kessler, M. McKusick; ! 234: Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, ! 235: SIGPLAN Notices, Vol. 17, No 6, pp. 120-126, June 1982. ! 236: .Sh HISTORY ! 237: .Nm Gprof ! 238: appeared in 4.2 BSD. ! 239: .Sh BUGS ! 240: The granularity of the sampling is shown, but remains ! 241: statistical at best. ! 242: We assume that the time for each execution of a function ! 243: can be expressed by the total time for the function divided ! 244: by the number of times the function is called. ! 245: Thus the time propagated along the call graph arcs to the function's ! 246: parents is directly proportional to the number of times that ! 247: arc is traversed. ! 248: .Pp ! 249: Parents that are not themselves profiled will have the time of ! 250: their profiled children propagated to them, but they will appear ! 251: to be spontaneously invoked in the call graph listing, and will ! 252: not have their time propagated further. ! 253: Similarly, signal catchers, even though profiled, will appear ! 254: to be spontaneous (although for more obscure reasons). ! 255: Any profiled children of signal catchers should have their times ! 256: propagated properly, unless the signal catcher was invoked during ! 257: the execution of the profiling routine, in which case all is lost. ! 258: .Pp ! 259: The profiled program must call ! 260: .Xr exit 2 ! 261: or return normally for the profiling information to be saved ! 262: in the ! 263: .Pa gmon.out ! 264: file.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.