trace — Trace or track Python statement execution

Вихідний код: Lib/trace.py


The trace module allows you to trace program execution, generate annotated statement coverage listings, print caller/callee relationships and list functions executed during a program run. It can be used in another program or from the command line.

Дивись також

Coverage.py

Популярний сторонній інструмент покриття, який забезпечує виведення HTML разом із розширеними функціями, такими як покриття гілок.

Використання командного рядка

The trace module can be invoked from the command line. It can be as simple as

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

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

--help

Показ використання та вихід.

--version

Відображення версії модуля та вихід.

Added in version 3.8: Додано параметр --module, який дозволяє запускати виконуваний модуль.

Основні параметри

At least one of the following options must be specified when invoking trace. The --listfuncs option is mutually exclusive with the --trace and --count options. When --listfuncs is provided, neither --count nor --trace are accepted, and vice versa.

-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 — це ім’я файлу, у який потрібно записати оновлену інформацію про кількість. час дозволяє відображати мітку часу щодо початку трасування.

run(cmd)

Виконайте команду та зберіть статистику виконання з поточними параметрами трасування. cmd має бути рядком або кодовим об’єктом, придатним для передачі в exec().

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

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

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

Викликати func із заданими аргументами під керуванням об’єкта Trace із поточними параметрами трасування.

results()

Повертає об’єкт CoverageResults, який містить сукупні результати всіх попередніх викликів run, runctx і runfunc для даного екземпляра Trace. Не скидає накопичені результати трасування.

class trace.CoverageResults

Контейнер для результатів покриття, створений Trace.results(). Не має створюватися безпосередньо користувачем.

update(other)

Об’єднати дані з іншого об’єкта CoverageResults.

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

Напишіть результати покриття. Встановіть show_missing, щоб показувати рядки, які не мали збігів. Встановіть summary, щоб включити до вихідних даних підсумок покриття для кожного модуля. coverdir вказує каталог, у який будуть виведені файли результатів покриття. Якщо None, результати для кожного вихідного файлу розміщуються в його каталозі.

If ignore_missing_files is True, coverage counts for files that no longer exist are silently ignored. Otherwise, a missing file will raise a FileNotFoundError.

Змінено в версії 3.13: Added ignore_missing_files parameter.

Простий приклад, що демонструє використання програмного інтерфейсу:

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