【发布时间】:2020-01-07 07:25:23
【问题描述】:
我注意到,当我使用 perl -MDevel::Cover=-silent,-nogcov foo.pl 运行我的程序以收集 foo.pl 的覆盖率信息时,我的部分程序的运行速度大幅下降,这些程序分叉和执行非 perl 程序,如 tar、@987654325 @ 或 dpkg-deb。感谢this question 我想出了如何选择性地禁用Devel::Cover,所以我现在写:
my $is_covering = !!(eval 'Devel::Cover::get_coverage()');
my $pid = fork();
if ($pid == 0) {
eval 'Devel::Cover::set_coverage("none")' if $is_covering;
exec 'tar', '-cf', ...
}
这样做,每次测试减少了 5 分钟的运行时间,对于 122 次测试,我节省了 10 小时的计算时间。
不幸的是,我不能总是将此 eval 语句添加到分叉的子进程中。例如,当我使用system() 时,这是不可能的。我想避免将我的每个system() 调用重写为手动fork/exec。
有没有办法为我的分叉进程或基本上不是我的脚本foo.pl 的所有内容禁用 Devel::Cover?
谢谢!
【问题讨论】:
标签: perl code-coverage devel-cover