追踪函数

set_trace() 函数用于实现 debugger、profiler、coverage 工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此不一定在所有 Python 实现中都可用。

sys.settrace() 用于设置系统的追踪函数。追踪函数是线程特定的;因此对于支持多线程的调试器,必须使用 set_trace()threading.settrace() 给每个正在调试的线程注册追踪函数。

追踪函数应该带三个参数:

当进入到新的本地作用域时,追踪函数会被调用(event 参数会被设置为 'call');它应该返回用于这个新作用域的本地追踪函数的引用,如果不追踪该作用域应该返回 None。

本地追踪函数应该返回它自己或其它追踪函数的引用,或者返回 None,以关闭追踪。

如果追踪函数中发生任何错误,它会被取消。

event 的含义如下:

注意:因为异常会沿着调用链传播,因此在每个层级都会生成 'exception' 事件。

可以通过显式地指定 frame.f_trace = tracefunc 的方式,设置追踪函数,而不是依赖已经安装的追踪函数的返回值间接地设置。这种情况,需要在当前 frame 上激活追踪函数,而 settrace() 不需要。为了使这种方式生效,需要使用 settrace() 安装全局的追踪函数,以开启运行时追踪机制。

关于 code 和 frame 对象的更多信息,请参考:https://docs.python.org/3/reference/datamodel.html#types


例子


参考文档