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=".")