首页 > 解决方案 > 从调试器执行单个操作码

问题描述

我写了一个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遇到 a 时,我想做类似的事情:

print(frame.f_code.co_names[namei], old_val, new_val)

但我想不出任何可以证明这一点的方法:

x=1;y=2;z=3

或类似的;Pythonsys.settrace在每一行都停止,但仅此而已。我可以通过执行单个操作码并读取帧的堆栈来解决这个问题......但我该怎么做

有没有办法在 Python 中单步执行单个操作码(而不是行)?

标签: python-3.xdebuggingbytecodepdbcpython

解决方案


推荐阅读