相关疑难解决方法(0)

如何获取对应于Python AST节点的源代码?

Python AST节点具有linenocol_offset属性,它们指示相应代码范围的开始.是否有一种简单的方法可以获得代码范围的结束?第三方图书馆?

python abstract-syntax-tree

14
推荐指数
3
解决办法
3641
查看次数

如何逐步完成Python表达式评估过程?

我想构建一个可视化调试器,它可以帮助编程学生了解表达式评估是如何进行的(子表达式如何通过它们的值进行评估和"替换",例如Excel中的表达式评估可视化器).

看起来你不能用Python的pdb来完成这个过程,因为它最好的步骤粒度就是代码行.是否有可能逐步通过Python字节码?任何其他想法如何实现这一目标?

编辑:我需要一个可以在CPython标准库之上构建的轻量级解决方案.

python debugging pdb

7
推荐指数
1
解决办法
905
查看次数

在C python中,访问字节码评估堆栈

给定一个C Python框架指针,我如何查看任意评估堆栈条目?(某些特定的堆栈条目可以通过找到locals(),我说的是其他堆栈条目。)

不久前,我问了一个更广泛的问题:

获取C python exec参数字符串或访问评估堆栈

但是在这里,我想着重于能够在运行时读取CPython堆栈条目。

我将采用在CPython 2.7或Python 3.3之后的任何Python上均可使用的解决方案。但是,如果您还有其他工作要解决,请分享,如果没有更好的解决方案,我将接受。

我宁愿不修改C Python代码。实际上,在Ruby中,我这样做是为了获得想要的东西。我可以根据经验说,这可能不是我们想要的工作方式。但是,如果没有更好的解决方案,我会考虑的。(我对SO点的理解是,无论哪种方式,我都会以失败的方式失去它。因此,我很高兴看到它表现出最大的精神和意愿去看待这一点(假设它可行)的人。)

更新:请参阅user2357112 tldr的注释;基本上,这是很难做到的。(不过,如果您认为自己有尝试的勇气,请务必这样做。)

因此,让我将范围缩小到我认为可行的这个更简单的问题:

给定python堆栈框架(如)inspect.currentframe(),找到评估堆栈的开始。在C版本的结构中,这是f_valuestack。然后,我们需要使用Python中的一种方法从那里读取Python值/对象。

更新2好赏金的期限已经结束,没有人(包括我自己的简要答案)提供具体的代码。我觉得这是一个良好的开始,现在我对情况的了解比以前要多得多。在强制性的“描述为什么您应该有赏金的描述”中,我列出了其中一种选择,“以引起更多对这个问题的关注”,并且在某种程度上,对于先前化身的看法少于十二种。问题,当我键入此内容时,它已经被查看了不到190次。所以这是成功的。然而...

如果将来有人决定进一步进行此操作,请与我联系,我将设立另一个赏金。

谢谢大家

python bytecode cpython reverse-engineering disassembly

5
推荐指数
2
解决办法
529
查看次数