我已经写了一个sys.settrace
函数:
import sys
def tracefunc(frame, event, arg):
if event == 'call':
if '__debug_me__' in frame.f_code.co_names:
return tracefunc
return None
if frame is not None:
print(event, frame.f_code, frame.f_lasti)
# I am stuck here
每当遇到STORE_NAME
时,我想做类似的事情:
print(frame.f_code.co_names[namei], old_val, new_val)
但是我无法想到任何可以证明这一点的方法:
x=1;y=2;z=3
等; Python的sys.settrace
会在每一行停止,但就此而言。我可以通过执行单个操作码并读取帧的堆栈来解决这个问题......但是我该怎样做 ?
有没有办法在Python中逐步执行单个操作码(而不是行)?