trace
— Trace or track Python statement execution¶
Вихідний код: Lib/trace.py
Модуль trace
дозволяє вам відстежувати виконання програми, генерувати списки охоплення анотованих інструкцій, друкувати зв’язки між викликами та функціями списку, що виконуються під час виконання програми. Його можна використовувати в іншій програмі або з командного рядка.
Дивись також
- Coverage.py
Популярний сторонній інструмент покриття, який забезпечує виведення HTML разом із розширеними функціями, такими як покриття гілок.
Використання командного рядка¶
Модуль trace
можна викликати з командного рядка. Це може бути так просто:
python -m trace --count -C . somefile.py ...
Вищезазначене виконає somefile.py
і створить анотовані списки всіх модулів Python, імпортованих під час виконання в поточний каталог.
- --help¶
Показ використання та вихід.
- --version¶
Відображення версії модуля та вихід.
Added in 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 — це ім’я файлу, у який потрібно записати оновлену інформацію про кількість. час дозволяє відображати мітку часу щодо початку трасування.
- 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)¶
Напишіть результати покриття. Встановіть 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=".")