PDF de programación - info gprof

Imágen de pdf info gprof

info gprofgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 28 de Octubre del 2017)
877 visualizaciones desde el 28 de Octubre del 2017
269,8 KB
56 paginas
Creado hace 11a (20/03/2013)
ESCUELA SUPERIOR DE INGENIERÍA

INGENIERÍA TÉCNICA EN INFORMÁTICA DE

GESTIÓN

Info gprof

Ángel García Fernández

Mayo de 2012

CAPÍTULO 1

Info gprof

Preámbulo

Este apéndice es una traducción libre realizada por mi a partir del

fichero Info del Manual de gprof en inglés.

Me he decidido a realizar esta traducción porque no existe ninguna
traducción del Info suficientemente completa en español, hasta aho-
ra. Y para la comprensión completa de esta herramienta (gprof) creo
que es imprescindible la lectura de ciertas partes de este Manual.

1.1. Perfilando Un Programa: ¿Dónde Gasta Su

Tiempo?

Este manual describe el perfilador GNU, gprof, y como puedes
usarlo para determinar qué partes de un programa están tomando
más tiempo de ejecución. Asumimos que sabes cómo escribir, compi-
lar y ejecutar programas. GNU gprof fue escrito por Jay Fenlason.

Este documento se distribuye bajo los términos de la GNU Free
Documentation License. Una copia de la licencia se incluye en la sec-
ción titulada "GNU Free Documentation License".

Introducción Qué significa perfilado, y por qué es útil (apartado 1.2,

página 2).

Compilar Cómo compilar tu programa para ser perfilado (aparta-

do 1.3, página 3).

1

2

CAPÍTULO 1. INFO GPROF

Ejecutar Ejecutar tu programa para generar los datos de perfilado

(apartado 1.4, página 5).

Invocar Cómo ejecutar gprof, y sus opciones (apartado 1.5, pági-

na 6).

Salida Interpretar la salida de gprof (apartado 1.6, página 17).

Fiabilidad Problemas potenciales que debes saber (apartado 1.6.5,

página 31).

¿Cómo hago? Respuestas para preguntas frecuentes (apartado 1.7,

página 33).

Incompatibilidades (entre GNU gprof y Unix gprof (apartado 1.8, pá-

gina 34).)

Detalles Detalles de cómo se ha hecho el perfilado (apartado 1.9,

página 35).

GNU Free Documentation License GNU Free Documentation Licen-

se (apartado 1.10, página 44).

1.2.

Introducción al Perfilado

El perfilado te permite aprender dónde tu programa gasta el tiem-
po y qué funciones llaman a qué otras funcionas mientras se ejecuta-
ba. Esta información puede mostrar qué partes de tu programa son
más lentas de lo que esperabas, y podrían ser candidatas para ser re-
escritas para hacer que tu programa se ejecute más rápido. También
puede decirte qué funciones se están llamando más o menos veces de
las que esperabas. Esto puede ayudarte a encontrar errores que de
otro modo no te darías cuenta.

Ya que el perfilador usa información recogida durante la ejecución
real de tu programa, se puede usar en programas que son demasia-
do largos o demasiado complejos para analizarlos leyendo el código
fuente. Sin embargo, el modo en que tu programa corra afectará a la
información que muestra en los datos de perfilado. Si no usas alguna
característica de tu programa mientras se está haciendo el perfilan,
no se generará información para esa característica.

El perfilado tiene algunos pasos:

Debes compilar y enlazar tu programa con el perfilado habilitado
(apartado 1.3, página 3).

1.3. COMPILAR UN PROGRAMA PARA HACER EL PERFILADO

3

Debes ejecutar tu programa para generar el fichero de datos de
perfilado (apartado 1.4, página 5).

Debes correr gprof para analizar los datos de perfilado (aparta-
do 1.5, página 6).

Los siguientes tres capítulos explican estos pasos en mayor deta-

lle.

Algunas formas de salida están disponibles a partir del análisis.
El "perfil plano"muestra cuánto tiempo tu programa gasta en ca-
da función, y cuantas veces esa función fue llamada. Si quieres sim-
plemente saber qué funciones queman la mayoría de los ciclos, se
exponen concisamente aquí (apartado 1.6.1, página 17).

El "grafo de llamadas"muestra, para cada función, qué funciones
la llaman, qué funciones llama, y cuantas veces. Hay también una
estimación de cuanto tiempo se gastó en las subrutinas de cada fun-
ción. Esta puede sugerir lugares donde podrías intentar eliminar lla-
madas a funciones que usan mucho tiempo (apartado 1.6.2, pági-
na 20).

El listado "fuente anotado.es una copia del código fuente del pro-
grama, etiquetado con el número de veces que cada línea del progra-
ma se ejecutó (apartado 1.6.4, página 29).

Para entender mejor cómo funciona el perfilado, puedes desear
leer una descripción de su implementación (apartado 1.9.1, pági-
na 35).

1.3. Compilar un Programa para Hacer el Perfilado

El primer paso para generar información de perfilado para tu pro-

grama es compilarlo y enlazarlo con el perfilado habilitado.

Para compilar un fichero fuente para perfilado, especifica la opción
‘-pg’ cuando lances el compilador. (Esta se añade a las opciones que
normalmente usas.)

Para enlazar el programa para perfilado, si usas un compilador
como ‘cc’ para hacer el enlazado, simplemente especifica ‘-pg’ además
de tus opciones usuales. La misma opción, ‘-pg’, altera ambos, la
compilación o el enlazado para hacer lo que es necesario para hacer
el perfilado. Aquí hay ejemplos:

cc -g -c myprog.c utils.c -pg
cc -o myprog myprog.o utils.o -pg

4

CAPÍTULO 1. INFO GPROF

La opción ‘-pg’ también funciona con un comando que a la vez com-
pila y enlaza:

cc -o myprog myprog.c utils.c -g -pg
Nota: La opción ‘-pg’ debe ser parte de tus opciones de compilación
así como de tus opciones de enlazado. Si no, entonces no se encon-
trarán los datos del grafo de llamadas y cuando corras gprof tendrás
un mensaje de error como este:

gprof: gmon.out file is missing call-graph data

Si añades la opción ‘-Q’ para suprimir la impresión de los datos del
grafo de llamadas, entonces aún podrás ver los periodos de tiempo:

Flat profile:

Each sample counts as 0.01 seconds.

%

cumulative

self

time
44.12
35.29
20.59

seconds

0.07
0.14
0.17

seconds
0.07
0.06
0.04

self

total

calls

Ts/call

Ts/call

name
zazLoop
main
bazMillion

%

the percentage of the total running time of the

Si corres el enlazador ‘ld’ directamente en lugar de a través de un
compilador como ‘cc’, podrás tener que especificar un un fichero de
inicio de perfilado ‘gcrt0.o’ como el primer fichero de entrada en lugar
del habitual ‘crt0.o’. Además, querrías probablemente especificar la
librería de C de perfilado, ‘libc_p.a’, escribiendo ‘-lc_p’ en lugar del
habitual ‘-lc’. Esto no es absolutamente necesario, pero haciendo esto
te da información del número de llamadas de las funciones de la
librería estándar tal como ‘read’ y ‘open’. Por ejemplo:

ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p

Si compilas sólo algunos módulos del programa con ‘-pg’, aún pue-
des hacer el perfilado del programa, pero conseguirás una informa-
ción completa sobre los módulos que se compilaron sin ‘-pg’. La úni-
ca información que obtienes para las funciones de esos módulos es
el tiempo total gastado en ellas; no hay registro de cuantas veces se
llamaron, o desde dónde. Esto no afectará el perfil plano (excepto que
el campo ‘calls’ -llamadas- para las funciones se quedará en blanco),
pero reducirá enormemente la utilidad del grafo de llamadas.

1.4. EJECUTAR EL PROGRAMA

5

Si deseas desarrollar un perfilado linea-a-linea, también necesi-
tarás especificar la opción ‘-g’, esto indica al compilador que inserte
símbolos de depuración al programa que compara las direcciones del
programa con las líneas de código fuente (apartado 1.6.3, página 28).
Además de las opciones ‘-pg’ y ‘-g’, versiones anteriores de GCC
requieren que especifiques la opción ‘-a’ cuando compilas con el fin
de instrumentalizarlo para realizar el cálculo de los bloques-básicos.
Las nuevas versiones no requieren esta opción y no la aceptaran; el
cálculo de bloques-básicos estará siempre activado cuando lo está la
opción ‘-pg’.

Cuando el cálculo de bloques-básicos está activado, a medida que
el programa corre contará cuantas veces ejecutó cada bifurcación de
cada sentencia ‘if’, cada iteración de cada bucle ‘do’, etc. Esto habilita-
rá gprof para que construya una lista con el código fuente etiquetado
con las veces que cada línea de código fue ejecutada.

No importa que GCC soporte diferentes métodos de perfilado los

cuales son habilitados con los parámetros ‘-fprofile-arcs’, ‘-ftest-coverage’
y ‘-fprofile-values’. Estos parámetros no producen datos que sean úti-
les para gprof de todos modos, así que no se tratan más en este
manual. También hay un parámetro ‘-finstrument-functions’ el cual
puede causar que GCC inserte llamadas a rutinas de intrumenta-
ción realizadas por el usuario a la entrada y la salida de todas las
funciones de su programa. Esto se puede usar para implementar un
esquema de perfilado alternativo.

1.4. Ejecutar el programa

Una vez que se ha compilado el programa para perfilarlo, debes
correrlo para que genere la información que gprof necesita. Simple-
mente corre el programa como de costumbre, usando los argumentos,
nombre de ficheros, etc que uses normalmente. El programa, sin em-
bargo, correrá algo más lento de lo normal debido al tiempo gastado
reuniendo y escribiendo los datos de perfilado.

El modo en que corras el programa–los argumentos y entrada que
le des– podría tener un efecto drástico en la información de perfilado
mostrada. Los datos de perfilado describirán las partes del programa
que se activaron por el uso particular de la entrada que usaste. Por
ejemplo, si el primer comando que diste a tu programa es salir, los
datos de perfilado sólo mostrarán el tiempo usado en inicializarse y
en limpiarse, pero no mucho más.

Tu programa escribirá los datos de perfilado en un fichero llama-
do ‘gmon.out’ justamente antes de salir. Si ya hay un fichero llamado

6

CAPÍTULO 1. INFO GPROF

‘gmon.out’, sus contenidos son sobreescritos. No hay manera actual-
mente para decirle al programa que escriba los datos de perfilado con
otro nombre diferente, pero tu puedes renombrar el fichero más tarde
si te preocupa que pueda ser sobreescrito.

A fin de escribir el fichero ‘gmon.out’ adecuadamente, tu programa
debe salir normalmente: por retornar de la función ‘main’ o por llamar
a ‘exit’. Llamar a la función de bajo-nivel ‘_exit’ no escribe los datos
de perfilado, y tampoco la terminación an
  • Links de descarga
http://lwp-l.com/pdf7299

Comentarios de: info gprof (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad