
Existem diversos softwares para fazer análise de desempenho, no entanto, nesse cpp::daily de hoje vamos ver como utilizar o GNU Gprof que faz parte do GNU Binutils um pacote com diversas ferramentas úteis e que muito provavelmente já está instalado no seu sistema.
Para isso vamos ver como proceder para análisar um binário de um código.
Para esse exemplo vamos utilizar o seguinte código: vim main.cpp.
#include <iostream>
int decrement_25mi( int );
int decrement_50mi( int );
int decrement_100mi( int );
int main( int argc, char ** argv ){
  int i = 0;
  for( int j = 0; j < 100000000; ++j){
    i++;
  }
  i = decrement_100mi(i);
  std::cout << "Contador = " << i << '\n';
  return 0;
}
int decrement_25mi( int i ){
  for( int j = 0; j < 25000000; ++j){
    --i;
  }
  return i;
}
int decrement_50mi( int i){
  i = decrement_25mi(i);
  i = decrement_25mi(i);
  return i;
}
int decrement_100mi( int i){
  i = decrement_50mi(i);
  i = decrement_25mi(i);
  i = decrement_25mi(i);
  return i;
}Agora vamos compilar nosso código com a opção -pg para o GNU Gprof:
g++ -pg main.cppAgora precisamos rodar nosso binário para o GNU Gprof gerar o arquivo gmon.out no mesmo diretório
./a.outSe quisermos obter os dados do desempenho basta rodar o comando:
gprof ./a.outA saída será extensa com diversas informações detalhadas.
Se quisermos dados gráficos que são mais fáceis de analisar, precisaremos de duas ferramentas do Python:
Você pode usar o PIP para instalá-los
pip install graphviz --user
pip install gprof2dot --userLembrando que o diretório dos binários do
pipprecisam estar na sua variável$PATHpara você utilizar os comandos direto do seu terminal.
Após instalados, próximo passo é gerar a saída do GNU Gprof junto do binário com o gmon.out para um arquivo, exemplo:
gprof ./a.out gmon.out > report.txtAgora vamos utilizar o gprof2dot para gerar um .dot:
gprof2dot report.txt > report.dotE por fim gerar uma imagem com o comando dot:
dot -Tpng -o profile.png report.dotBasta vermos a imagem e analisar o desempenho:
xdg-open profile.pngE o resultado será:

Show, né?! Para mais informações rode: main gprof.
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: