Python AST节点具有lineno和col_offset属性,它们指示相应代码范围的开始.是否有一种简单的方法可以获得代码范围的结束?第三方图书馆?
我想构建一个可视化调试器,它可以帮助编程学生了解表达式评估是如何进行的(子表达式如何通过它们的值进行评估和"替换",例如Excel中的表达式评估可视化器).
看起来你不能用Python的pdb来完成这个过程,因为它最好的步骤粒度就是代码行.是否有可能逐步通过Python字节码?任何其他想法如何实现这一目标?
编辑:我需要一个可以在CPython标准库之上构建的轻量级解决方案.
给定一个C Python框架指针,我如何查看任意评估堆栈条目?(某些特定的堆栈条目可以通过找到locals(),我说的是其他堆栈条目。)
不久前,我问了一个更广泛的问题:
但是在这里,我想着重于能够在运行时读取CPython堆栈条目。
我将采用在CPython 2.7或Python 3.3之后的任何Python上均可使用的解决方案。但是,如果您还有其他工作要解决,请分享,如果没有更好的解决方案,我将接受。
我宁愿不修改C Python代码。实际上,在Ruby中,我这样做是为了获得想要的东西。我可以根据经验说,这可能不是我们想要的工作方式。但是,如果没有更好的解决方案,我会考虑的。(我对SO点的理解是,无论哪种方式,我都会以失败的方式失去它。因此,我很高兴看到它表现出最大的精神和意愿去看待这一点(假设它可行)的人。)
更新:请参阅user2357112 tldr的注释;基本上,这是很难做到的。(不过,如果您认为自己有尝试的勇气,请务必这样做。)
因此,让我将范围缩小到我认为可行的这个更简单的问题:
给定python堆栈框架(如)inspect.currentframe(),找到评估堆栈的开始。在C版本的结构中,这是f_valuestack。然后,我们需要使用Python中的一种方法从那里读取Python值/对象。
更新2好赏金的期限已经结束,没有人(包括我自己的简要答案)提供具体的代码。我觉得这是一个良好的开始,现在我对情况的了解比以前要多得多。在强制性的“描述为什么您应该有赏金的描述”中,我列出了其中一种选择,“以引起更多对这个问题的关注”,并且在某种程度上,对于先前化身的看法少于十二种。问题,当我键入此内容时,它已经被查看了不到190次。所以这是成功的。然而...
如果将来有人决定进一步进行此操作,请与我联系,我将设立另一个赏金。
谢谢大家