【发布时间】:2011-09-05 15:12:14
【问题描述】:
我正在尝试确定为一种语言编写行分析器所需的条件,例如那些可用于 Python 和 Matlab 的语言。
解释“行分析器”的一种天真的方法是假设可以在每一行周围插入时间记录,但行的定义取决于解析器如何处理空白,这只是第一个问题。似乎需要使用解析树并在各个节点周围插入时间。
这个结论正确吗?线路分析器是否需要解析树,是否只需要这些(除了时间记录)?
更新 1:提供赏金,因为问题仍未解决。
更新 2:这是众所周知的Python line profiler 的链接,以防它有助于回答这个问题。我还不能确定它相对于解析的行为。恐怕 Matlab 分析器的代码无法访问。
另请注意,可以说手动装饰输入代码将消除对解析树的需求,但这不是自动分析器。
更新 3:虽然这个问题与语言无关,但之所以出现这个问题,是因为我正在考虑为 R 创建这样的工具(除非它存在并且我还没有找到它)。
更新 4:关于使用行分析器与调用堆栈分析器 - this post 与使用调用堆栈分析器(在本例中为Rprof())举例说明了为什么使用调用堆栈而不是使用调用堆栈会很痛苦通过线路分析器直接分析事物。
【问题讨论】:
-
您知道 R 中的
Rprof()以及用于后处理的“R CMD Rprof”,以及至少两个用于汇总和可视化分析数据的 CRAN 包吗?如果你这样做了,你能详细说明你所寻找的东西有什么不同吗? -
你好@Iterator。我知道堆栈采样的机制在 matlab 中,因为它可以被 Ctrl-C 中断,你可以用dbstack 显示堆栈。如果您需要构建分析器,您可以自动化manual method。无需解析。
-
@Dirk:是的,知道
Rprof()并且已经广泛使用它和其他包-see this Q。简而言之,Rprof是调用堆栈分析器,而不是行分析器。堆栈分析器通常很有用且足够,但根据我的经验,行分析器在使用 R、Matlab 和 Python 等语言时通常更有帮助。与Rprof()合作,我写了很多代码来分析它的输出,然后放弃并手动修饰代码;调用堆栈可能很刺激,但也很痛苦。 -
@Iterator:感谢您的更新。有了这个我会说这是错误的论坛。在 r-devel 上询问,或直接给蒂尔尼教授发电子邮件。
-
@Dirk:我手边没有笔记,但我正在考虑使用 Luke Tierney 的软件包之一来解析代码,然后装饰离散的代码块,因为我不确定简单地装饰每一行不会破坏代码。
标签: python r language-agnostic profiling parse-tree