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
- Para escribir el archivo gmon.out correctamente, su programa debe salir normalmente. El archivo no se produce cuando el programa sale al llamar a la función _exit() o cuando termina anormalmente debido a una señal desatendida.
- El archivo "gmon.out" siempre se crea en el directorio de trabajo actual. Por lo tanto, asegúrese de que su programa tiene suficientes privilegios para crear un archivo en el directorio actual.
- Una herramienta externa con el nombre gprof2dot puede usarse para convertir el gráfico de llamada de gprof a una forma gráfica.
- Usando gprof, también puede producir una lista de fuentes comentadas que da una idea del número de veces que se ejecutó cada línea del programa. Para producir esta información, compila el programa con -g (junto con la opción -pg explicada anteriormente) y ejecuta el comando gprof con la opción -A de la línea de comandos.