27.6. trace — Rastreia ou acompanha a execução de instruções Python¶
Código Fonte: Lib/trace.py
O módulo trace permite que você rastreie a execução do programa, gere listagens de cobertura de instrução anotada, imprima relações de chamador/receptor e funções de lista executadas durante a execução de um programa. Ele pode ser usado em outro programa ou na linha de comando.
Ver também
- Coverage.py
Uma popular ferramenta de cobertura de terceiros que fornece saída HTML junto com recursos avançados, como cobertura de ramificações.
27.6.1. Uso da linha de comando¶
O módulo trace pode ser chamado a partir da linha de comando. Pode ser tão simples quanto:
python -m trace --count -C . somefile.py ...
O comando acima irá executar algumarquivo.py e gerar listagens anotadas de todos os módulos Python importados durante a execução para o diretório atual.
-
--help¶ Exibe o uso e sai.
-
--version¶ Exibe a versão do módulo e sai.
27.6.1.1. Opções principais¶
Pelo menos uma das seguintes opções deve ser especificada ao invocar trace. A opção --listfuncs é mutuamente exclusiva com as opções --trace e --count. Quando --listfuncs é fornecida, nem --count nem --trace são aceitas, e vice-versa.
-
-c,--count¶ Produz um conjunto de arquivos de listagem anotada após a conclusão do programa que mostra quantas vezes cada instrução foi executada. Veja também
--coverdir,--filee--no-reportabaixo.
-
-t,--trace¶ Exibe linhas como elas são executadas.
-
-l,--listfuncs¶ Exibe as funções executadas executando o programa.
-
-r,--report¶ Produz uma lista anotada de uma execução de programa anterior que usava a opção
--counte--file. Isso não executa nenhum código.
-
-T,--trackcalls¶ Exibe os relacionamentos de chamada expostos ao executar o programa.
27.6.1.2. Modificadores¶
-
-f,--file=<file>¶ Nome de um arquivo para acumular contagens em várias execuções de rastreamento. Deve ser usado com a opção
--count.
-
-C,--coverdir=<dir>¶ Diretório para onde vão os arquivos de relatório. O relatório de cobertura para
pacote.móduloé escrito em arquivodir/pacote/módulo.cover.
-
-m,--missing¶ Ao gerar listagens anotadas, marca as linhas que não foram executadas com
>>>>>>.
-
-s,--summary¶ Ao usar
--countou--report, escreve um breve resumo no stdout para cada arquivo processado.
-
-R,--no-report¶ Não gera listagens anotadas. Isso é útil se você pretende fazer várias execuções com
--count, e então produzir um único conjunto de listagens anotadas no final.
-
-g,--timing¶ Prefixa cada linha com o tempo desde o início do programa. Usado apenas durante o rastreamento.
27.6.1.3. Filtros¶
Essas opções podem ser repetidas várias vezes.
-
--ignore-module=<mod>¶ Ignora cada um dos nomes de módulo fornecidos e seus submódulos (se for um pacote). O argumento pode ser uma lista de nomes separados por uma vírgula.
-
--ignore-dir=<dir>¶ Ignora todos os módulos e pacotes no diretório e subdiretórios nomeados. O argumento pode ser uma lista de diretórios separados por
os.pathsep.
27.6.2. Interface programática¶
-
class
trace.Trace(count=1, trace=1, countfuncs=0, countcallers=0, ignoremods=(), ignoredirs=(), infile=None, outfile=None, timing=False)¶ Cria um objeto para rastrear a execução de uma única instrução ou expressão. Todos os parâmetros são opcionais. count ativa a contagem de números de linha. trace ativa o rastreamento de execução de linha. countfuncs ativa a listagem das funções chamadas durante a execução. countcallers ativa o rastreamento de relacionamento de chamada. ignoremods é uma lista de módulos ou pacotes a serem ignorados. ignoreirs é uma lista de diretórios cujos módulos ou pacotes devem ser ignorados. infile é o nome do arquivo do qual deve ler as informações de contagem armazenadas. outfile é o nome do arquivo no qual deve escrever as informações de contagem atualizadas. timing ativa a exibição de um carimbo de data/hora relativo ao momento em que o rastreamento foi iniciado.
-
run(cmd)¶ Executa o comando e reúne estatísticas da execução com os parâmetros de rastreamento atuais. cmd deve ser uma string ou objeto código, adequado para passar para
exec().
-
runctx(cmd, globals=None, locals=None)¶ Executa o comando e reúne estatísticas da execução com os parâmetros de rastreamento atuais, nos ambientes global e local definidos. Se não for definido, globals e locals usam como padrão dicionários vazios.
-
runfunc(func, *args, **kwds)¶ Chama func com os argumentos fornecidos sob controle do objeto
Tracecom os parâmetros de rastreamento atuais.
-
results()¶ Retorna um objeto
CoverageResultsque contém os resultados cumulativos de todas as chamadas anteriores pararun,runctxerunfuncpara a instânciaTracefornecida. Não redefine os resultados de rastreamento acumulados.
-
-
class
trace.CoverageResults¶ Um contêiner para resultados de cobertura, criado por
Trace.results(). Não deve ser criado diretamente pelo usuário.-
update(other)¶ Mescla dados de outro objeto
CoverageResults.
-
write_results(show_missing=True, summary=False, coverdir=None)¶ Escreve os resultados da cobertura. Defina show_missing para mostrar as linhas que não tiveram ocorrências. Defina o summary para incluir na saída o resumo da cobertura por módulo. coverdir especifica o diretório no qual os arquivos de resultados de cobertura serão enviados. Se for
None, os resultados de cada arquivo de origem são colocados em seu diretório.
-
Um exemplo simples que demonstra o uso da interface programática:
import sys
import trace
# create a Trace object, telling it what to ignore, and whether to
# do tracing or line-counting or both.
tracer = trace.Trace(
ignoredirs=[sys.prefix, sys.exec_prefix],
trace=0,
count=1)
# run the new command using the given tracer
tracer.run('main()')
# make a report, placing output in the current directory
r = tracer.results()
r.write_results(show_missing=True, coverdir=".")
