26.7. trace跟踪或追踪 Python 语句执行

源程序代码:Lib/trace.py


跟踪模块允许您跟踪程序的执行,生成注释的语句覆盖列表,打印调用方/被调用方的关系和列表功能,在程序运行过程中执行。它可以用在另一个程序中或从命令行。

26.7.1. Command-Line Usage

可以从命令行调用跟踪模块。它可以是一样简单

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

上述将执行somefile.py ,并生成注释的列表导入到当前目录执行期间的所有 Python 模块。

--help

显示用法并退出。

--version

显示模块和退出的版本。

26.7.1.1. Main options

下列选项中至少一个必须指定调用跟踪时。 — — Listfuncs选项是互斥的— — 跟踪— — 计数选项。 — — Listfuncs提供时,既不— — 计数也不— — 跟踪被接受,反之亦然。

-c, --count

制作一套显示多少次每个语句的程序完成后的附加说明的清单文件。又见— — coverdir — — 文件— — 没有报告以下。

-t, --trace

显示行,随着它们的执行。

-l, --listfuncs

显示由运行程序执行的函数。

-r, --report

产生附加注释的名单,从早期版本的程序运行,使用— — 计数— — 文件选项。这不会执行任何代码。

-T, --trackcalls

显示由运行程序公开的调用关系。

26.7.1.2. Modifiers

-f, --file=<file>

要在几个跟踪运行积累计数的文件的名称。应该用— — 计数选项。

-C, --coverdir=<dir>

在哪里报告文件的目录。 Package.module的覆盖率报表是写入文件dir//模块.cover

-m, --missing

当生成附加说明的清单,标记不被处决的线>>>>>>

-s, --summary

当使用— — 计数— — 报告,写至标准输出处理的每个文件的简短摘要。

-R, --no-report

不会产生附加说明的清单。这是有用的如果你打算用的几个运行— — 计数,然后产生一整套单一的注释列表末尾。

-g, --timing

自项目开始以来的前缀与时俱进的每一行。仅用于跟踪时。

26.7.1.3. Filters

这些选项可能会重复多次。

--ignore-module=<mod>

每个给定的模块名称和其模忽略 (如果它是一个包)。参数可以是以逗号分隔的名称的列表。

--ignore-dir=<dir>

忽略所有的模块和命名的目录和子目录中的包。参数可以是由os.pathsep分隔的目录列表。

26.7.2. Programmatic Interface

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

创建跟踪执行单个语句或表达式的对象。所有参数都是可选的。计数,使计数的行号。跟踪启用行执行跟踪。countfuncs使上市期间调用的函数中运行。countcallers使调用关系跟踪。ignoremods是一个模块或忽视的包的列表。ignoredirs是应忽略其模块或软件包的目录列表。infile是要从中读取存储的计数信息文件的名称。文件的输出是文件的在其中写入更新的计数信息的名称。时已启动跟踪显示,定时启用相对于一个时间戳。

run(cmd)

执行命令并从当前的跟踪参数执行收集统计信息。cmd必须是一个字符串或代码的对象,适于传递到exec ()

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

执行命令并从使用中定义的全局和局部环境的当前跟踪参数执行收集统计信息。如果没有定义的全局变量和局部变量默认为空字典。

runfunc(func, *args, **kwds)

调用func通过给定的参数在当前的跟踪参数的跟踪对象的控制之下。

results()

返回一个CoverageResults对象,包含的所有以前调用的运行 runctxrunfunc为给定跟踪实例累积的结果。不会重置累积的跟踪结果。

class trace.CoverageResults

覆盖率结果,由Trace.results()创建的容器。不应直接由用户创建。

update(other)

在另一个CoverageResults对象中的数据合并。

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

写覆盖率结果。设置show_missing显示了没有命中的线。设置摘要,包括在输出中汇总每个模块的覆盖面。coverdir指定的覆盖率结果文件将输出的目录。如果没有每个源文件中的结果都放在它的目录。

一个简单的示例演示使用的编程接口:

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