.\" 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 .\" .\" Translated into Spanish on Apr 29 1999 by Gerardo Aburruzaga .\" García .\" .TH GPROF 1 "29 de Enero de 1993" .SH NOMBRE gprof \- muestra datos de perfilado con grafo de llamadas .\"display call graph profile data .SH SINOPSIS .B gprof [ \-abcsz ] [ \-e|\-E .I nombre .B ] [ \-f|\-F .I nombre .B ] .B [ \-k .I nombreorigen nombredestino .B ] [ .I fichobj .B [ .I gmon.out .B ] .B ] .SH DESCRIPCIÓN .B gprof produce un perfil de ejecución de programas en C, Pascal o FORTRAN77. El efecto de las rutinas llamadas se incorpora en el perfil de cada llamador. Los datos del perfil se toman del fichero de perfil de grafos de llamada \&(`gmon.out' por omisión) que es creado por programas que se han compilado con la opción .B \-pg de .BR cc ( 1 ) , .BR pc ( 1 ) , y .BR f77 ( 1 ) . La opción .B \-pg también enlaza al programa versiones de las rutinas de biblioteca que están compiladas para la perfilación. .B Gprof lee el fichero objeto dado (el predeterminado es `a.out') y establece la relación entre su tabla de símbolos y el perfil de grafo de llamadas de `gmon.out'. Si se especifica más de un fichero de perfil, la salida de .B gprof muestra la suma de la información de perfilado en los ficheros de perfil dados. .PP .B Gprof calcula la cantidad de tiempo empleado en cada rutina. Después, estos tiempos se propagan a lo largo de los vértices del grafo de llamadas. Se descubren los ciclos, y se hace que las llamadas dentro de un ciclo compartan el tiempo del ciclo. El primer listado muestra las funciones clasificadas de acuerdo al tiempo que representan incluyendo el tiempo de sus descendientes en su grafo de llamadas. Debajo de cada entrada de función se muestran sus hijos (directos) del grafo de llamadas, y cómo sus tiempos se propagan a esta función. Un despliegue similar sobre la función muestra cómo el tiempo de esta función y el de sus descendientes se propagan a sus padres (directos) del grafo de llamadas. .PP También se muestran los ciclos, con una entrada para el ciclo completo y un listado da los miembros del ciclo y sus contribuciones al tiempo y número de llamadas del ciclo. .PP En segundo lugar, se da un perfil plano, similar al producido por .BR prof ( 1 ) . Este listado de los tiempos de ejecución totales, los números de llamadas, el tiempo en milisegundos que la llamada empleó en la propia rutina, y el tiempo en ms que la llamada empleó en la propia rutina pero incluyendo sus descendientes. .PP Finalmente, se proporciona un índice de los nombres de función. .SH OPCIONES Se dispone de las siguientes opciones: .TP .B \-a suprime la impresión de las funciones declaradas estáticamente. Si se da esta opción, toda la información de interés sobre la función estática (static) (p.ej.: muestras de tiempo, llamadas a otras funciones, llamadas desde otras funciones) pertenece a la función cargada justo antes de la función estática en el fichero \&`fichobj'. .TP .B \-b suprime la impresión de una descripción de cada campo en el perfil. .TP .B \-c el grafo de llamadas estático del programa se descubre mediante un método heurístico que examina el espacio de texto del fichero objeto. Los padres o hijos estáticos se muestran con números de llamadas 0. .TP .BI "\-e " nombre suprime la impresión de la entrada de perfil de grafo para la rutina .I nombre y todos sus descendientes (a menos que tuvieran otros ancestros que no se supriman). Se puede dar más de una opción .BR \-e . Sólo un .I nombre se puede dar con cada opción .BR \-e . .TP .BI "\-E " nombre suprime la impresión de la entrada de perfil de grafo para la rutina .I nombre (y sus descendientes) como .BR \-e , arriba, y también excluye el tiempo transcurrido en .I nombre (y sus descendientes) de los cálculos del total y del porcentaje de tiempo. (Por ejemplo, .BI "\-E " mcount .BI "\-E " mcleanup es lo predeterminado.) .TP .BI "\-f " nombre imprime la entrada del perfil de grafo de sólo la rutina especificada en .I nombre y sus descendientes. Se puede dar más de una opción .BR \-f . Sólo se puede dar un .I nombre con cada opción .BR \-f . .TP .BI "\-F " nombre imprime la entrada del perfil de grafo de sólo la rutina .I nombre y sus descendientes (como .BR \-f , arriba) y tamibén emplea sólo los tiempos de las rutinas mostradas en los cálculos de total y porcentaje de tiempos. Se puede dar más de una opción .BR \-F . Sólo un .I nombre se puede dar con cada opción .BR \-F . La opción .B \-F tiene preferencia sobre la .BR \-E . .TP .BI "\-k " "nombreorigen nombredestino" borrará cualesquiera arcos desde la rutina .I nombreorigen a la rutina .IR nombredestino . Esto puede emplearse para romper ciclos no deseados. Se puede dar más de una opción .BR \-k . Sólo se puede dar un par de nombres de rutina con cada opción .BR \-k . .TP .B \-s se produce un fichero de perfil llamado `gmon.sum' que representa la suma de la información de perfil en todos los ficheros de perfil especificados. Este fichero de sumario de perfil se puede pasar más tarde a otras ejecuciones de \fBgprof\fP (probablemente también con .BR \-s ) para acumular datos de perfilado entre varias ejecuciones de un fichero `\fIfichobj\fP'. .TP .B -v muestra el número de versión de \fBgprof\fP, y luego acaba. .TP .B -z muestra rutinas con utilización cero (según se muestra en los números de llamada y tiempo acumulado). Esto es útil con la opción .B \-c para descubrir qué rutinas no se llaman nunca. .PP .SH FICHEROS .ta \w'gmon.sum 'u a.out la lista de nombres y espacio de texto. .br gmon.out grafo de llamadas dinámico y perfil. .br gmon.sum resumen de grafo de llamadas dinámico y perfil. .SH VÉASE TAMBIÉN .BR monitor ( 3 ) , .BR profil ( 2 ) , .BR cc ( 1 ) , .BR prof ( 1 ) .sp ``An Execution Profiler for Modular Programs'', por S. Graham, P. Kessler, M. McKusick; .I Software \- Practice and Experience, Vol. 13, pp. 671-685, 1983. .sp ``gprof: A Call Graph Execution Profiler'', por S. Graham, P. Kessler, M. McKusick; .I Proceedings of the SIGPLAN '82 Symposium on Compiler Construction, SIGPLAN Notices, Vol. 17, Nº 6, pp. 120-126, Junio de 1982. .SH HISTORIA .B Gprof apareció en 4.2 BSD. .SH FALLOS Se muestra la granularidad del muestreo, pero como mucho permanece estadística. Suponemos que el tiempo para cada ejecución de una función se puede expresar por el tiempo total para la función dividido por el número de veces que la función es llamada. Así el tiempo propagado a través de los arcos del grafo de llamadas a los padres de la fnución es directamente proporcional al número de veces que ese arco es atravesado. .PP Los padres que no son ellos mismos perfilados tendrán el tiempo de sus hijos perfilados propagados a ellos, pero aparecerán como invocados espontáneamente en el listado de grafo de llamadas, y su tiempo no será propagado más allá. Similarmente, los capturadores de señales, aunque se perfilen, aparecerán como espontáneos (aunque por razones más oscuras). Cualesquier hijos perfilados de capturadores de señal deberían tener sus tiempos correctamente propagados, a menos que el capturador de señal fuera invocado durante la ejecución de la rutina perfilándose, en cuyo caso se pierde todo. .PP El programa perfilado debe llamar a .BR exit ( 2 ) o acabar normalmente para que la información de perfil se guarde en el fichero `gmon.out'.