我想构建一个可视化调试器,它可以帮助编程学生了解表达式评估是如何进行的(子表达式如何通过它们的值进行评估和“替换”,例如Excel中的表达式评估可视化器)。
看起来你无法通过Python的pdb逐步完成这个过程,因为它最精细的步骤粒度就是代码行。是否有可能逐步通过Python字节码?任何其他想法如何实现这一目标?
编辑:我需要一个可以在CPython标准库之上构建的轻量级解决方案。
答案 0 :(得分:2)
它附加到pdb,所以我想这不是你想要的。至少,当您单步执行某个功能时,它会清楚地显示您所在的功能。
对于教学生来说,你可以做到:
我知道,这是完美的,但这是我能想到的最好的。
答案 1 :(得分:1)
使用pdb,可以进入任何函数调用。对于任何其他语句,pdb可以在行中打印相关名称的值。您还在寻找哪些额外功能?
如果你试图“进入”列表理解之类的东西,那么从纯粹的Python角度来看这是行不通的,因为它只是一个操作码。在某些时候,你需要告诉你的学生每个表达式,这就是Python进入C实现并评估这个......'。
答案 2 :(得分:1)
您应该查看reinteract,这很简单,您可以为此做出贡献
答案 3 :(得分:1)
我自己也有一个解决方案 - 我可以通过在虚拟方法调用中包装所有(子)表达式来检测代码(或AST),这只会返回它的参数。例如。
x = f(sin(x + y))
变为
x = dummy(f(dummy(sin(dummy(dummy(x) + dummy(y))))))
这样我保证在每个子表达式得到评估后得到通知,我也得到了值。我还可以添加关于当前处理表达式的哪个部分的额外位置/ AST信息,例如:
... dummy(x, line=23, col=13, length=1) ...
不幸的是,这需要弄乱AST和编译......