Como usar o comando gprof linux

Como usar o comando gprof linux
Ao trabalhar com código, é sempre bom acompanhar como as várias funções estão executando em termos de tempo. Um bom programa deve completar rapidamente, mas isso depende da velocidade de execução de sua função. Quanto maior o programa, maior a probabilidade de ter várias funções aninhadas que, se não bem otimizadas, podem causar gargalos para todo o programa.

A otimização de código é um aspecto essencial da codificação e vários programas ajudam a acompanhar o desempenho do código. As ferramentas de software são referidas Profilers. Se você está procurando um que seja baseado em Linux, você tem GProf à sua disposição.

Trabalhando com o GPROF Profiler

O GPROF é um perfil do GNU que mede o desempenho de um programa. Ele mede o desempenho dos programas escritos em fortran, c ++, montagem e c. Os resultados gerados pelo comando Linux ajudam a otimizar o código para uma execução e eficiência mais rápidas, exibindo as partes do programa que consome o tempo mais de execução.

Para usar o comando gprof para analisar seu programa, você deve compilá -lo usando o -pág opção. Primeiro, vamos criar um programa para usar para o nosso exemplo. Aqui, criamos um programa C, compilamos, executamos a saída com o GPROF e verificamos o relatório gerado pelo GPROF para ver como o comando se executa.

Nosso arquivo de programa é nomeado Demo1.c. Para compilá -lo usando o compilador GCC, você deve adicionar o -pág Opções para adicionar detalhes extras a serem usados ​​pelo GPROF. O comando será:

$ GCC -pg Demo1.C -O output1

Nossa saída compilada é saída1 E uma vez gerado, precisamos executá -lo normalmente usando o seguinte comando:

$ ./output1

A execução deste executável gera os dados de perfil que, por padrão, são nomeados Gmon.fora.

GPROF trabalha com GMON.para ver todos os detalhes sobre o programa.

$ GPROF OUTPUT1 GMON.fora

Observe que o GPROF leva dois argumentos: o programa compilado e o GMON.fora. O relatório de saída contém duas seções: o Profilégio plano e a geração de perfil de chamadas.

Analisando a saída do Profiler do GPROF

1. Perfil plano

Da saída anterior, podemos observar as várias seções do relatório.

A primeira coisa a observar são as várias funções que o programa teve. Nesse caso, tivemos o func3, func2, func1, e Randomnum listado no nome seção. O % tempo representa o tempo de execução de cada uma das funções. Vemos que o func3 levou mais tempo para correr, o que implica que, se precisássemos otimizar nosso programa, é onde começaríamos.

O chamadas representar o número de vezes que cada uma das funções é invocada. Para cada função, o tempo gasto em cada função por chamada é representado no self ms/chamada. Antes de atingir uma função específica, você também pode ver o tempo gasto na função acima dela, o segundos cumulativos, Isso acrescenta o segundo e o tempo gasto nas funções anteriores.

O Segundos auto é o tempo gasto apenas em uma função específica. O Total MS/Chamada é o tempo gasto em uma função, incluindo o tempo gasto em seus descendentes para cada chamada feita para a função.

Usando os detalhes fornecidos anteriormente, agora você pode otimizar o desempenho do seu programa para ver qual parte precisa de alguma reflexão para reduzir o uso de tempo.

2. Gráfico de chamada

É uma tabela representando uma função e seus filhos.

O índice lista a função atual com a qual você pode corresponder ao número com o nome à direita.

O %tempo representa o tempo gasto em uma função e seus filhos enquanto o auto é o tempo gasto na função excluindo seus filhos.

A melhor parte do gráfico de chamadas é que todos os detalhes estão bem representados e você pode obter mais informações sobre quaisquer resultados da saída exibida na sua linha de comando.

Conclusão

O ponto principal é que, ao trabalhar com programas que usam o GCC Compilador, você sempre pode verificar a velocidade de execução deles para saber como otimizá -los melhor. Introduzimos o que é o comando gprof e o que ele faz. Além disso, vimos um exemplo prático de usá -lo para fornecer uma vantagem para otimizar seu código.