import sys
frame = sys._getframe()
frame.f_locals['a'] = 5
frame.f_trace = lambda x, y, z: print("x")
sys.settrace(frame.f_trace)
print(a)
output:
x
5
x
x
最近在了解 python 的 pdb 工作原理,看到了 function call 中的 frame 这个概念,其中 f_locals 这种静态值概念比较好理解。
但这个 f_trace 理解起来就不太直观,不明白为什么上面的代码会打印三个 'x',而且行还跨越了后面的 print 。
有了解这一方面的 v2er 吗?还请解惑。