Cómo crear un perfil de un programa C en Linux usando GNU gprof

El rendimiento es uno de los mayores retos a los que se enfrentan los programadores al desarrollar software. Esa es la razón por la que la creación de perfiles de código es uno de los aspectos más importantes del desarrollo de software, ya que le permite identificar cuellos de botella, código muerto e incluso errores. Si usted es un programador que desarrolla aplicaciones de software para Linux, el perfilador de GNU «gprof» es la herramienta a tener en cuenta.

Descargar e instalar

Gprof viene preinstalado con la mayoría de las distribuciones de Linux, pero si ese no es el caso con su distribución de Linux, puede descargarlo e instalarlo a través de un gestor de paquetes de línea de comandos como apt-get o yum. Por ejemplo, ejecute el siguiente comando para descargar e instalar gprof en sistemas basados en Debian:

sudo apt-get install binutils

Requisitos

Antes de usar gprof para generar datos de perfilado, asegúrese de que el ejecutable de su programa contiene información adicional requerida por el perfilador para funcionar correctamente. Esto se puede conseguir añadiendo la opción de línea de comandos -pg mientras compila su código, asumiendo que está usando el compilador gcc. Si está utilizando comandos separados para compilar y enlazar, añada la opción de línea de comandos a ambos comandos.

Usando gprof

Considere el siguiente programa C como ejemplo:

printf (»
Hola Mundo!
«);
func1();
func2();
retorno 0;
}>

Como se describe en la sección anterior, compila el código con la opción -pg:

gcc -Wall -pg test.c -o test

Una vez compilado, ejecute el programa:

 ./test

Después de la ejecución exitosa, el programa producirá un archivo llamado «gmon.out» que contiene la información de perfil, pero en forma cruda, lo que significa que no se puede abrir el archivo y leer directamente la información. Para generar un archivo legible para humanos, ejecute el siguiente comando:

gprof test gmon.out> prof_output

Este comando escribe toda la información de perfiles en formato legible para humanos en el archivo «prof_output». Tenga en cuenta que puede cambiar el nombre del archivo de salida según su conveniencia.

Perfil plano y gráfico de llamada

Si abre el archivo que contiene los datos de perfilado, verá que la información se divide en dos partes: Perfil plano y gráfico de llamada. Mientras que la primera contiene detalles como el recuento de llamadas de función, el tiempo total de ejecución de una función, y más, la segunda describe el árbol de llamadas del programa, proporcionando detalles sobre las funciones padre e hijo de una función en particular.

Por ejemplo, el siguiente es el perfil Plano en nuestro caso:

A continuación se muestra el gráfico de llamadas:

índice % de tiempo que los niños se llaman por su nombre
0,00 0,00 1/256 principal[2]
0,94 0,00 255/256 func1[3]
1] 100.0 0.94 0.00 256 func2[1]
-----------------------------------------------
2] 100,0 0,00 0,94 principal[2]
0,00 0,94 1/1 func1[3] 0,00 0,94 1/1 func1[3] 0,00 0,94 1/1 func1[3] 0,00 0,94 1/1 func1[3] 1/1 func1
0,00 0,00 1/256 func2[1]
-----------------------------------------------
0,00 0,94 1/1 principal[2]
3] 99,6 0,00 0,94 1 func1[3]
0,94 0,00 255/256 func2[1]
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Tenga en cuenta que la explicación detallada de estos campos está presente en el archivo que contiene la información de perfil (prof_output en este caso) y se genera cada vez que se ejecuta el perfilador. Para desactivar los detalles, utilice la opción de línea de comandos -b con el comando gprof.

Algunos puntos importantes

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *