给定一个 C Python 帧指针,如何查看任意计算堆栈条目? (一些特定的堆栈条目可以通过locals()
,我说的是其他堆栈条目。)
我不久前问了一个更广泛的问题:
获取 C python exec 参数字符串或访问计算堆栈
但在这里我想重点关注能够在运行时读取 CPython 堆栈条目。
我将采用适用于 CPython 2.7 或任何高于 Python 3.3 的 Python 的解决方案。但是,如果您有除此之外的工作,请分享,如果没有更好的解决方案,我会接受。
我不想修改 C Python 代码。在 Ruby 中,我实际上已经这样做了得到我想要的。根据我的经验,这可能不是我们想要的工作方式。但同样,如果没有更好的解决方案,我会采用它。 (我对SO点的理解是,无论哪种方式,我都会在赏金中失去它。所以我很高兴看到它落到那些表现出最好的精神和意愿的人手中,假设它有效。)
update:请参阅 user2357112 tldr 的评论;基本上这是很难做到的。 (不过,如果您认为自己有勇气尝试,请务必这样做。)
因此,让我将范围缩小到这个我认为可行的更简单的问题:
给定一个 python 堆栈框架,例如inspect.currentframe()
,找到计算堆栈的开头。在该结构的 C 版本中,这是f_valuestack。然后我们需要一种 Python 方法来从那里读取 Python 值/对象。
update 2好吧,赏金的时间段已经结束,没有人(包括我自己的总结答案)提供具体的代码。我觉得这是一个好的开始,我现在比以前更了解情况了。在强制性的“描述为什么你认为应该有赏金”中,我列出了所提供的选择之一“以引起更多对这个问题的关注”,并且在这个程度上,对前世的化身有不到十几个观点这个问题,当我输入此内容时,它已被查看了不到 190 次。所以这是成功的。然而...
如果将来有人决定进一步开展这项工作,请联系我,我将设置另一笔赏金。
谢谢大家。