NOMBRE¶
gprof - muestra datos de perfilado con grafo de llamadas
SINOPSIS¶
gprof [ -abcsz ] [ -e|-E nombre ] [ -f|-F nombre
] [ -k nombreorigen nombredestino ] [
fichobj [ gmon.out ] ]
DESCRIPCIÓN¶
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
-pg de
cc(
1)
,
pc(
1)
, y
f77(
1)
. La opción
-pg también enlaza al programa versiones de las rutinas de
biblioteca que están compiladas para la perfilación.
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
gprof muestra la suma de la información de
perfilado en los ficheros de perfil dados.
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.
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.
En segundo lugar, se da un perfil plano, similar al producido por
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.
Finalmente, se proporciona un índice de los nombres de función.
OPCIONES¶
Se dispone de las siguientes opciones:
- -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'.
- -b
- suprime la impresión de una descripción de cada campo en el
perfil.
- -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.
- -e nombre
- suprime la impresión de la entrada de perfil de grafo para la
rutina nombre y todos sus descendientes (a menos que tuvieran otros
ancestros que no se supriman). Se puede dar más de una
opción -e. Sólo un nombre se puede dar con
cada opción -e.
- -E nombre
- suprime la impresión de la entrada de perfil de grafo para la
rutina nombre (y sus descendientes) como -e, arriba, y
también excluye el tiempo transcurrido en nombre (y sus
descendientes) de los cálculos del total y del porcentaje de
tiempo. (Por ejemplo, -E mcount -E mcleanup es
lo predeterminado.)
- -f nombre
- imprime la entrada del perfil de grafo de sólo la rutina
especificada en nombre y sus descendientes. Se puede dar más
de una opción -f. Sólo se puede dar un nombre
con cada opción -f.
- -F nombre
- imprime la entrada del perfil de grafo de sólo la rutina
nombre y sus descendientes (como -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 -F. Sólo un nombre se
puede dar con cada opción -F. La opción -F
tiene preferencia sobre la -E.
- -k nombreorigen nombredestino
- borrará cualesquiera arcos desde la rutina nombreorigen a la
rutina nombredestino. Esto puede emplearse para romper ciclos no
deseados. Se puede dar más de una opción -k.
Sólo se puede dar un par de nombres de rutina con cada
opción -k.
- -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 gprof (probablemente también
con -s) para acumular datos de perfilado entre varias ejecuciones
de un fichero ` fichobj'.
- -v
- muestra el número de versión de gprof, y luego
acaba.
- -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 -c para descubrir qué rutinas no se llaman
nunca.
FICHEROS¶
a.out la lista de nombres y espacio de texto.
gmon.out grafo de llamadas dinámico y perfil.
gmon.sum resumen de grafo de llamadas dinámico y perfil.
VÉASE TAMBIÉN¶
monitor(
3)
, profil(
2)
,
cc(
1)
, prof(
1)
``An Execution Profiler for Modular Programs'', por S. Graham, P. Kessler, M.
McKusick;
Software - Practice and Experience, Vol. 13, pp. 671-685,
1983.
``gprof: A Call Graph Execution Profiler'', por S. Graham, P. Kessler, M.
McKusick;
Proceedings of the SIGPLAN '82 Symposium on Compiler
Construction, SIGPLAN Notices, Vol. 17, Nº 6, pp. 120-126, Junio de
1982.
HISTORIA¶
Gprof apareció en 4.2 BSD.
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.
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.
El programa perfilado debe llamar a
exit(
2) o acabar normalmente
para que la información de perfil se guarde en el fichero
`gmon.out'.