trace — Трассировка или отслеживание выполнения оператора Python

Исходный код: Lib/trace.py.


Модуль trace позволяет отслеживать выполнение программы, генерировать аннотированные листинги покрытия операторов, выводить отношения caller/callee и список функций, выполняемых во время выполнения программы. Его можно использовать в другой программе или из командной строки.

См.также

Coverage.py

Модуль позволяет отслеживать выполнение программы, генерировать аннотированные листинги покрытия операторов, выводить отношения caller/callee и список функций, выполняемых во время выполнения программы. Его можно использовать в другой программе или из командной строки.

Использование командной строки

Модуль trace может быть вызван из командной строки. Это может быть просто

python -m trace --count -C . somefile.py ...

Вышеуказанное выполнит somefile.py и сгенерирует аннотированные списки всех модулей Python, импортированных во время выполнения в текущий каталог.

--help

Показать использование и выйти.

--version

Вывести версию модуля и выйти.

Добавлено в версии 3.8: Добавлена опция --module, позволяющая запустить исполняемый модуль.

Основные параметры

При вызове trace должна быть указана хотя бы одна из следующих опций. Опция --listfuncs является взаимоисключающей с опциями --trace и --count. Если указана опция --listfuncs, ни --count, ни --trace не принимаются, и наоборот.

-c, --count

По завершении программы выдает набор аннотированных файлов листинга, показывающих, сколько раз был выполнен каждый оператор. См. также --coverdir, --file и --no-report ниже.

-t, --trace

Отображение строк по мере их выполнения.

-l, --listfuncs

Отображение функций, выполняемых при запуске программы.

-r, --report

Создайте аннотированный список из предыдущего запуска программы, в котором использовались опции --count и --file. При этом не выполняется никакой код.

-T, --trackcalls

Отобразите отношения вызова, открытые при выполнении программы.

Модификаторы

-f, --file=<file>

Имя файла для накопления подсчетов за несколько прогонов трассировки. Следует использовать с опцией --count.

-C, --coverdir=<dir>

Каталог, в который помещаются файлы отчетов. Отчет о покрытии для package.module записывается в файл dir/package/module.cover.

-m, --missing

При генерации аннотированных листингов помечайте строки, которые не были выполнены, символом >>>>>>.

-s, --summary

При использовании --count или --report запишите краткое резюме в stdout для каждого обрабатываемого файла.

-R, --no-report

Не генерировать аннотированные листинги. Это полезно, если вы собираетесь выполнить несколько прогонов с --count, а затем в конце выдать один набор аннотированных списков.

-g, --timing

Префикс каждой строки с временем, прошедшим с момента запуска программы. Используется только при трассировке.

Фильтры

Эти опции можно повторять несколько раз.

--ignore-module=<mod>

Игнорирует каждое из заданных имен модулей и их подмодулей (если это пакет). Аргументом может быть список имен, разделенных запятой.

--ignore-dir=<dir>

Игнорировать все модули и пакеты в названном каталоге и подкаталогах. Аргументом может быть список каталогов, разделенных символом os.pathsep.

Игнорирует каждое из заданных имен модулей и их подмодулей (если это пакет). Аргументом может быть список имен, разделенных запятой.

class trace.Trace(count=1, trace=1, countfuncs=0, countcallers=0, ignoremods=(), ignoredirs=(), infile=None, outfile=None, timing=False)

Создайте объект для отслеживания выполнения одного оператора или выражения. Все параметры являются необязательными. count включает подсчет номеров строк. trace включает трассировку выполнения строк. countfuncs позволяет перечислить функции, вызванные во время выполнения. countcallers позволяет отслеживать отношения вызовов. ignoremods - список модулей или пакетов для игнорирования. ignoredirs - список каталогов, модули или пакеты которых следует игнорировать. infile - это имя файла, из которого нужно считать сохраненную информацию о подсчетах. outfile - имя файла, в который записывается обновленная информация о подсчетах. timing позволяет отобразить временную метку относительно момента начала трассировки.

run(cmd)

Выполнить команду и собрать статистику по ее выполнению с текущими параметрами трассировки. cmd должен быть строкой или объектом кода, подходящим для передачи в exec().

runctx(cmd, globals=None, locals=None)

Выполнить команду и собрать статистику выполнения с текущими параметрами трассировки, в определенных глобальном и локальном окружениях. Если не определены, globals и locals по умолчанию имеют пустые словари.

runfunc(func, /, *args, **kwds)

Выполнить команду и собрать статистику выполнения с текущими параметрами трассировки, в определенных глобальном и локальном окружениях. Если не определены, globals и locals по умолчанию имеют пустые словари.

results()

Возвращает объект CoverageResults, содержащий накопленные результаты всех предыдущих вызовов run, runctx и runfunc для данного экземпляра Trace. Не сбрасывает накопленные результаты трассировки.

class trace.CoverageResults

Контейнер для результатов покрытия, создаваемый Trace.results(). Не должен создаваться непосредственно пользователем.

update(other)

Объединить данные из другого объекта CoverageResults.

write_results(show_missing=True, summary=False, coverdir=None)

Запишите результаты покрытия. Установите show_missing, чтобы показать строки, в которых нет совпадений. Установите summary, чтобы включить в вывод сводку покрытия по модулю. coverdir указывает каталог, в который будут выводиться файлы результатов покрытия. Если None, результаты для каждого исходного файла помещаются в его каталог.

Простой пример, демонстрирующий использование программного интерфейса:

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=".")
Вернуться на верх