trace ---跟踪或跟踪python语句执行

源代码: Lib/trace.py


这个 trace 模块允许您跟踪程序执行、生成带注释的语句覆盖率列表、打印调用方/被调用方关系以及在程序运行期间执行的列表函数。它可以在另一个程序中使用,也可以从命令行使用。

参见

Coverage.py

一种流行的第三方覆盖工具,它提供HTML输出以及诸如分支覆盖等高级功能。

命令行用法

这个 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)

创建一个对象来跟踪单个语句或表达式的执行。所有参数都是可选的。 计数 启用行号计数。 追踪 启用行执行跟踪。 伯爵夫人 启用运行期间调用的函数的列表。 公务人员 启用调用关系跟踪。 忽略命令 是要忽略的模块或包的列表。 伊格雷迪尔斯 是应忽略其模块或包的目录列表。 因循守旧 从中读取存储的计数信息的文件名。 输出文件 要在其中写入更新的计数信息的文件的名称。 计时 启用相对于开始显示跟踪的时间戳。

run(cmd)

执行该命令并使用当前跟踪参数从执行中收集统计信息。 cmd 必须是字符串或代码对象,适合传入 exec() .

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

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

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

调用 func 在给定的参数的控制下 Trace 具有当前跟踪参数的对象。

results()

返回A CoverageResults 对象,该对象包含以前所有调用的累积结果 runrunctxrunfunc 对于给定的 Trace 实例。不重置累积的跟踪结果。

class trace.CoverageResults

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

update(other)

从另一个合并数据 CoverageResults 对象。

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

写覆盖率结果。集合 show_missing 显示没有点击的行。集合 总结 在输出中包括每个模块的覆盖率摘要。 盖普迪尔 指定将输出覆盖率结果文件的目录。如果 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=".")