假设我有如下代码:
import sys
def printer(frame, event, arg):
print(frame, event, arg)
return printer
sys.settrace(printer)
x = 1
sys.settrace(None)
自从
每当进入新的本地范围时,都会调用trace函数(事件设置为“调用”)
上面的代码没有输出。请参阅我之前的问题。
那么有没有办法跟踪全局作用域中的行,比如 x = 1
?
sys._getframe().f_trace = printer
替换了sys.settrace(printer)
,但是仍然没有输出。我有什么误解吗? - laike9msys.settrace
实现也很重要,特别是trace_trampoline
,它是一个C级别的跟踪函数,不同于传递给settrace
的Python级别函数,并且用于本地和全局跟踪函数调用。在ceval.c
中查找call_trace
也会出现一堆相关代码。 - user2357112