fbpx

Comandos Linux – Comando gprof

Comando Linux gprof

Atualizado: 05/04/2019 por Computer Hope

comando gprof

Em sistemas operacionais do tipo Unix, o comando gprof é uma ferramenta de desenvolvimento de software que exibe dados de perfil de gráfico de chamada de um binário compilado .

Este documento cobre a versão GNU / Linux do gprof .

Descrição

O gprof produz um perfil de execução dos programas C , Pascal ou Fortran77 . O efeito das rotinas chamadas é incorporado no perfil de cada chamador. Os dados do perfil são obtidos do arquivo de perfil do gráfico de chamadas ( gmon.out , por padrão), criado por programas que são compilados com a opção -pg de cc , pc e f77 . A opção -pg também se vincula nas versões das rotinas da biblioteca que são compiladas para criação de perfil. O gprof lê o arquivo de objeto fornecido (o padrão é a.out ) e estabelece a relação entre sua tabela de símbolos e o perfil do gráfico de chamada em gmon.out . Se mais de um arquivo de perfil for especificado, a saída gprof mostrará a soma das informações de perfil nos arquivos de perfil fornecidos.

Se você usa o gcc 2.95.x ou 3.0 para compilar seus binários, pode ser necessário adicionar -fprofile-arcs à linha de comando de compilação para que os gráficos de chamada sejam armazenados corretamente no gmon.out .

O gprof calcula a quantidade de tempo gasto em cada rotina. Em seguida, esses horários são propagados pelas bordas do gráfico de chamadas. Os ciclos são descobertos e chamadas para um ciclo são feitas para compartilhar o tempo do ciclo.

Várias formas de saída estão disponíveis a partir da análise:

  • perfil plano mostra quanto tempo seu programa passou em cada função e quantas vezes essa função foi chamada. Se você deseja saber quais funções queimam a maioria dos ciclos, é declarado de forma concisa aqui.
  • gráfico de chamadas mostra, para cada função, quais funções foram chamadas, quais outras funções foram chamadas e quantas vezes. Há também uma estimativa de quanto tempo foi gasto nas sub-rotinas de cada função. Isso pode sugerir lugares onde você pode tentar eliminar chamadas de função que usam muito tempo.
  • lista de fontes anotadas é uma cópia do código- fonte do programa, rotulado com o número de vezes que cada linha do programa foi executada.

Sintaxe

  gprof [- [abcDhilLrsTvwxyz]] [- [ACeEfFJnNOpPqQZ] [nome]] [-I dirs ] 
       [-d [ num ]] [-k de / para ] [-m min-count ] [-R map_file ] 
       [-t tamanho da tabela ] [- [no-] fonte anotada [= nome ]] 
       [- [no-] exec-counts [= nome ]] [- [no-] perfil plano [= nome ]] 
       [- [no-] gráfico [= nome ]] [- [no-] tempo = nome ] [- todas as linhas] [--brief] 
       [--debug [= nível ]] [- ordenação de funções] [- ordenação de arquivos map_file ] 
       [--directory-path = dirs ] [--display-unused-functions] 
       [--file-format = name ] [--file-info] [--help] [--line] 
       [--min-count = n ] [--no-static] [--print-path] [--separate-files] 
       [--static-call-graph] [--sum] [--table-length = len ] 
       [--tradicional] [--version] [--width = n ] [--ignore-non-functions] 
       [--demangle [= ESTILO ]] [- sem desmontagem] [--external-symbol-table = name ] 
       [arquivo de imagem] [arquivo de perfil ...]

Opções

Essas opções especificam qual dos vários formatos de saída o gprof deve produzir.

Muitas dessas opções usam um symspec opcional para especificar funções a serem incluídas ou excluídas. Essas opções podem ser especificadas várias vezes, com diferentes symspecs, para incluir ou excluir conjuntos de símbolos.

A especificação de qualquer uma dessas opções substitui o padrão ( -p -q ), que imprime um perfil plano e uma análise gráfica de chamadas para todas as funções.

-A [ symspec ], – fonte anotada [= symspec ]A opção -A faz com que o gprof imprima código fonte anotado. Se symspec for especificado, imprima a saída apenas para símbolos correspondentes.
-b , –briefSe a opção -b for dada, o gprof não imprimirá os resumos detalhados que tentam explicar o significado de todos os campos nas tabelas. Isso é útil se você pretende imprimir a saída ou está cansado de ver os anúncios.
-C [ symspec ], –exec-counts [= symspec ]A opção -C faz com que o gprof imprima um registro de funções e o número de vezes que cada um foi chamado. Se symspec for especificado, imprima o registro apenas para símbolos correspondentes.

Se o arquivo de dados do perfil contiver registros de contagem de blocos básicos, a especificação da opção -l , juntamente com -C , fará com que as contagens de execução de blocos básicos sejam contabilizadas e exibidas.

-i , –file-infoA opção -i faz com que o gprof exiba informações de resumo sobre o (s) arquivo (s) de dados do perfil e saia. O número de histograma, gráfico de chamadas e registros de contagem de blocos básicos é exibido.
-I dirs , –directory-path = dirsA opção -I especifica uma lista de diretórios de pesquisa nos quais encontrar arquivos de origem. A variável de ambiente GPROF_PATH também pode ser usada para transmitir essas informações. Usado principalmente para saída de fonte anotada.
-J [ symspec ], – fonte não anotada [= symspec ]A opção -J faz com que o gprof não imprima código fonte anotado. Se symspec for especificado, o gprof imprimirá a fonte anotada, mas excluirá os símbolos correspondentes.
-L , –print-pathNormalmente, os nomes de arquivos de origem são impressos com o componente do caminho suprimido. A opção -L faz com que o gprof imprima o nome completo do caminho dos nomes de arquivos de origem, que é determinado a partir das informações simbólicas de depuração no arquivo de imagem e é relativo ao diretório em que o compilador foi chamado.
-p [ symspec ], –flat-profile [= symspec ]A opção -p faz com que o gprof imprima um perfil plano. Se symspec for especificado, imprima o perfil plano apenas para símbolos correspondentes.
-P [ symspec ], – sem perfil plano [= symspec ]A opção -P faz com que o gprof suprima a impressão de um perfil plano. Se symspec for especificado, o gprof imprimirá um perfil plano, mas excluirá os símbolos correspondentes.
-q [ symspec ], –graph [= symspec ]A opção -q faz com que o gprof imprima a análise do gráfico de chamada. Se symspec for especificado, imprima o gráfico de chamada apenas para símbolos correspondentes e seus filhos.
-Q [ symspec ], –no-gráfico [= symspec ]A opção -Q faz com que o gprof suprima a impressão do gráfico de chamada. Se symspec for especificado, o gprof imprimirá um gráfico de chamada, mas excluirá os símbolos correspondentes.
-t , –table-length = numA opção -t faz com que o número de linhas de origem mais ativas em cada arquivo de origem seja listado quando a anotação de origem está ativada. O padrão é 10 .
-y , –separate-filesEsta opção afeta apenas a saída da fonte anotada. Normalmente, o gprof imprime arquivos de origem anotados na saída padrão. Se essa opção for especificada, a fonte anotada para um arquivo chamado caminho / nome do arquivo será gerada no arquivo nome-do-arquivo . Se o sistema de arquivos subjacente truncar filename-ann para substituir o nome do arquivo original, o gprof gerará uma fonte anotada no arquivo filename.ann (se o nome do arquivo original tiver uma extensão, essa extensão será substituída por .ann ).
-Z [ symspec ], –no-exec-counts [= symspec ]A opção -Z faz com que o gprof não imprima um registro de funções e o número de vezes que cada um foi chamado. Se symspec for especificado, imprima tally, mas exclua os símbolos correspondentes.
-r , – ordenação de funçõesopção – ordenação de função faz com que o gprof imprima uma ordenação sugerida de função para o programa com base em dados de criação de perfil. Esta opção sugere uma ordem que pode melhorar o comportamento de paginação, tlb e cache do programa em sistemas que suportam a ordem arbitrária de funções em um executável.

Os detalhes exatos de como forçar o vinculador a colocar funções em uma ordem específica dependem do sistema e estão fora do escopo deste manual.

-R map_file , –file-ordenando map_fileA opção –file-ordering faz com que o gprof imprima uma linha de link .o sugerida para o programa com base em dados de criação de perfil. Esta opção sugere uma ordem que pode melhorar o comportamento de paginação, tlb e cache do programa em sistemas que não suportam a ordem arbitrária de funções em um executável.

O uso do argumento -a é altamente recomendado com esta opção.

O argumento map_file é um nome de caminho para um arquivo que fornece o nome da função aos mapeamentos de arquivos do objeto. O formato do arquivo é semelhante à saída do programa nm .

  c-parse.o: 00000000 T yyparse
 c-parse.o: 00000004 C yyerrflag
 c-lang.o: 00000000 T talvez_objc_method_name
 c-lang.o: 00000000 T print_lang_statistics
 c-lang.o: 00000000 T reconhece_objc_chave
 c-decl.o: 00000000 T print_lang_identifier
 c-decl.o: 00000000 T print_lang_type
 ...

Para criar um map_file com GNU nm , digite um comando como ” nm –extern-only –defined-only -v –print-file-name program-name “.

-T , – tradicionalA opção -T faz com que o gprof imprima sua saída no estilo BSD “tradicional”.
-w largura , –width = larguraDefine a largura das linhas de saída como largura . Atualmente, é usado apenas ao imprimir o índice da função na parte inferior do gráfico de chamadas.
-x , – todas as linhasEsta opção afeta apenas a saída da fonte anotada. Por padrão, apenas as linhas no início de um bloco básico são anotadas. Se esta opção for especificada, todas as linhas de um bloco básico serão anotadas repetindo a anotação da primeira linha.
–demangle [= estilo ], – não-demangleEssas opções controlam se os nomes dos símbolos C ++ devem ser desmembrados ao imprimir a saída. O padrão é desmontar símbolos. A opção –no-demangle pode ser usada para desativar a desmontagem. Compiladores diferentes têm diferentes estilos de distorção. O argumento de estilo desmontável opcional pode ser usado para escolher um estilo desmontável apropriado para o seu compilador.

Opções de análise

-a –no-staticA opção -a faz com que o gprof suprima a impressão de funções (privadas) declaradas estaticamente. (Essas são funções cujos nomes não estão listados como globais e que não são visíveis fora do arquivo / função / bloco em que foram definidos.) O tempo gasto nessas funções, chamadas para / a partir delas, etc., serão todos atribuídos a a função que foi carregada diretamente antes dele no arquivo executável. Esta opção afeta o perfil plano e o gráfico de chamadas.
-c – gráfico de chamada estáticaA opção -c faz com que o gráfico de chamadas do programa seja aumentado por uma heurística que examina o espaço de texto do arquivo de objeto e identifica chamadas de função no código de máquina binário. Como os registros normais do gráfico de chamada são gerados apenas quando as funções são inseridas, essa opção identifica os filhos que poderiam ter sido chamados, mas nunca foram. Chamadas para funções que não foram compiladas com a criação de perfil ativada também são identificadas, mas somente se as entradas da tabela de símbolos estiverem presentes para elas. As chamadas para rotinas de biblioteca dinâmica geralmente não são encontradas por esta opção. Pais ou filhos identificados por essa heurística são indicados no gráfico de chamadas com contagem de chamadas 0.
-D , –ignore-non-functionsA opção -D faz com que o gprof ignore símbolos que não são conhecidos por serem funções. Essa opção fornece dados de perfil mais precisos nos sistemas em que são suportados ( Solaris e HPUX, por exemplo).
-k de / paraA opção -k permite excluir do gráfico de chamada todos os arcos dos símbolos correspondentes ao symspec daqueles correspondentes ao symspec.
-l –lineA opção -l permite a criação de perfil linha por linha, que faz com que as ocorrências do histograma sejam cobradas em linhas de código-fonte individuais, em vez de funções. Esse recurso funciona apenas com programas compilados por versões mais antigas do compilador gcc . As versões mais recentes do gcc foram projetadas para funcionar com a ferramenta gcov .

Se o programa foi compilado com a contagem de blocos básicos ativada, essa opção também identificará quantas vezes cada linha de código foi executada. Embora a criação de perfil linha por linha possa ajudar a isolar onde um programa está gastando seu tempo, ele também aumenta significativamente o tempo de execução do gprof e aumenta as imprecisões estatísticas.

-m num , –min-count = numEsta opção afeta apenas a saída da contagem de execução. Símbolos que são executados menos que num vezes são suprimidos.
-n symspec , –time = symspecA opção -n faz com que o gprof , em sua análise do gráfico de chamada, propague apenas os tempos dos símbolos correspondentes ao symspec .
-N symspec , –no tempo = symspecA opção -n faz com que o gprof , em sua análise do gráfico de chamada, não propague os tempos para os símbolos correspondentes ao symspec .
-S nome do arquivo , –external-symbol-table = nome do arquivoA opção -S faz com que o gprof leia um arquivo de tabela de símbolos externo, como / proc / kallsyms , em vez de ler a tabela de símbolos do arquivo de objeto especificado (o padrão é ” a.out “). Isso é útil para criar perfis de módulos do kernel .
-z , –display-unused-functionsSe você der a opção -z , o gprof mencionará todas as funções no perfil plano, mesmo aquelas que nunca foram chamadas e que não tiveram tempo gasto nelas. Isso é útil em conjunto com a opção -c para descobrir quais rotinas nunca foram chamadas.

Opções diversas

-d [ num ], –debug [= num ]A opção -d num especifica as opções de depuração . Se num não for especificado, habilite toda a depuração.
-h , –helpA opção -h imprime o uso da linha de comando.
-O nome , –arquivo-formato = nomeSeleciona o formato dos arquivos de dados do perfil. Os formatos reconhecidos são automático (o padrão), bsd , 4.4bsd , magic e prof (ainda não suportado).
-s , –sumA opção -s faz com que o gprof resuma as informações nos arquivos de dados de perfil em que leu e grave um arquivo de dados de perfil chamado gmon.sum , que contém todas as informações dos arquivos de dados de perfil em que o gprof leu. O arquivo gmon. sum pode ser um dos arquivos de entrada especificados; o efeito disso é mesclar os dados nos outros arquivos de entrada no gmon.sum .

Eventualmente, você pode executar o gprof novamente sem -s para analisar os dados cumulativos no arquivo gmon.sum .

-v , –versionO sinalizador -v faz com que o gprof imprima o número da versão atual e saia.

Opções obsoletas

Essas opções foram substituídas por versões mais recentes que usam o symspecs.

-e nome_da_funçãoA opção -e function diz ao gprof para não imprimir informações sobre a função function_name (e seus filhos …) no gráfico de chamada. A função ainda será listada como filho de qualquer função que a chamar, mas seu número de índice será mostrado como [não impresso] . Mais de uma opção -e pode ser dada; somente um nome_da_função pode ser indicado com cada opção -e .
-E nome_da_funçãoA opção de função -E funciona como a opção -e , mas o tempo gasto na função (e filhos que não foram chamados de nenhum outro lugar) não será usado para calcular as porcentagens de tempo do gráfico de chamada. Mais de uma opção -E pode ser dada; somente um nome_da_função pode ser indicado com cada opção -E .
-f nome_da_funçãoA opção -f function faz com que o gprof limite o gráfico de chamada à função function_name e seus filhos (e seus filhos …). Mais de uma opção -f pode ser dada; apenas um nome_da_função pode ser indicado com cada opção -f .
-F nome_da_funçãoA opção de função -F funciona como a opção -f , mas apenas o tempo gasto na função e seus filhos (e seus filhos …) serão usados ​​para determinar o tempo total e as porcentagens de tempo para o gráfico de chamada. Mais de uma opção -F pode ser dada; somente um nome_da_função pode ser indicado com cada opção -F . A opção -F substitui a opção -E .

arquivos

a.outa lista de nomes e o espaço do texto.
gmon.outgráfico e perfil de chamadas dinâmicos.
gmon.sumgráfico e perfil de chamada dinâmica resumida.

cc – Compilador da linguagem de programação C.

19 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.