3

我有一个用 perl 构建的中型到大型系统,它是在过去 15 年中开发的,由许多脚本和 pm 文件构建,为了改进系统,我需要更多数据,这是我看到的最简单的方法获取这些数据是让代码中的每个函数都将开始和结束时间打印到某个日志中,这样就有可能了解什么是花费最多时间的。然而,这是一个旧系统,有些部分比其他部分更难维护,最重要的是我需要它运行,这意味着为了获得真实数据,我需要它从生产中打印出来。我想要做的是以某种方式覆盖函数声明,以将每个函数开始包装在像 NAME start STARTTIME PARAMS 这样的行中,当它离开函数时,NAME 结束 STARTTIME PARAMS

有人能指出我正确的方向吗?谢谢

4

4 回答 4

6

看看Devel::NYTProf。它可以分析你所有的潜艇所花费的时间(并做更多的事情)。它不涉及大量杂乱的代码修改;相反,您只需使用它运行您的脚本:

perl -d:NYTProf your_script.pl
于 2013-04-11T07:58:19.983 回答
1

以前的答案是正确的(我特别推荐Devel::NYTProf)。但是,您通常可以应用一种更通用的技术来收集有关子例程行为的数据,即摆弄符号表,将代码“附加”(或前置)到实际子程序的代码中。

几个指针:

高温高压

于 2013-04-11T08:22:35.723 回答
0

听起来你需要使用分析器

http://www.perl.org/about/whitepapers/perl-profiling.html

于 2013-04-11T07:54:37.547 回答
0

Perl 分析器通常会对程序性能产生巨大影响,因此在生产中使用它们可能不是一个好主意。

你可以试试Devel::ContinuousProfiler,它声称影响很小(我自己没用过,今天早上才发现!)

于 2013-04-11T10:08:49.020 回答