【发布时间】:2011-06-01 16:59:04
【问题描述】:
我正在编写一个尝试比较两种方法的程序。我想为所有匹配的方法生成控制流图(CFG),并使用拓扑排序来比较这两个图。
【问题讨论】:
我正在编写一个尝试比较两种方法的程序。我想为所有匹配的方法生成控制流图(CFG),并使用拓扑排序来比较这两个图。
【问题讨论】:
有一个名为 staticfg 的 Python 包正是这样做的——从一段 Python 代码生成控制流图。
例如,将第一个quick sort Python snippet from Rosseta Code 放入qsort.py,下面的代码会生成它的控制流图。
from staticfg import CFGBuilder
cfg = CFGBuilder().build_from_file('quick sort', 'qsort.py')
cfg.build_visual('qsort', 'png')
请注意,它似乎不理解更高级的控制流,如推导。
【讨论】:
RPython,PyPy 背后的翻译工具链,为type inference 提供了一种获取flow graph(在PyPy 项目的pypy/rpython/flowspace 目录中)的方法。
这在大多数情况下效果很好,但不支持生成器。结果将采用 SSA 形式,这可能是好是坏,这取决于您想要什么。
http://pycallgraph.slowchop.com/ 看起来像你需要的。
Python trace 模块还有--trackcalls 选项,可以作为标准库中调用跟踪机制的入口点。
【讨论】: