我有一个庞大的perl脚本,它对模块中的几个函数有数百个调用,我需要跟踪执行这些函数的时间。
问题:我无法安装Devel::NYTProf
(不会在我的机器上的perl 5.8.8上编译),并且在这两个函数的每个实例周围添加Devel::Timer
次调用将非常耗时
我考虑过覆盖对这两个函数的调用,并且在我的覆盖内执行这两个函数,只需要几个Devel::Timer
调用。我的初始尝试最终以递归循环结束。
例如:
use strict;
Use SomePackage::SomeModule;
Use Devel::Timer;
my $t = Devel::Timer->new();
$someThing = new SomePackage::SomeModule();
$someThing->someFunction('test1','test2');
$t->mark('END');
$t->report();
sub SomePackage::SomeModule::someFunction {
$t->mark('start someFunction');
$someThing->someFunction(@_)
$t->mark('end someFunction');
}
这显然不起作用,但我在解决方案上没有明确的线索。
有任何想法或提示指出我正确的方法吗?
答案 0 :(得分:2)
ckeditor
答案 1 :(得分:2)
感谢ikegami的基础知识,我能够得到以下代码:
use strict;
use SomePackage::SomeModule;
use Devel::Timer;
my $t = Devel::Timer->new();
$someThing = new SomePackage::SomeModule();
my $someFunctionRef = \&SomePackage::SomeModule::someFunction;
my $someFunctionTrack = sub {
$t->mark('start someFunction');
$someFunctionRef->(@_);
$t->mark('end someFunction');
};
no warnings qw( redefine );
*SomePackage::SomeModule::someFunction = $someFunctionTrack;
$someThing->someFunction('test1','test2');
$t->mark('END');
$t->report();