當我運行Devel::Cover
與ModPerl::Registry
時,除BEGIN
塊外,我沒有得到覆蓋信息。當我使用Devel::Cover
從命令行或CGI運行相同的腳本時,一切正常(顯然)。Devel :: Cover和ModPerl :: Registry沒有運行時間覆蓋
如何讓Devel::Cover
「看到」我的代碼在運行時執行?
下面是我的httpd.conf
Devel::Cover
相關的東西:
MaxClients 1
PerlSetEnv DEVEL_COVER_OPTIONS -db,/tmp/cover_db,-silent,1
PerlRequire /var/www/project/startup.pl
這裏的startup.pl
:
#!/usr/bin/perl
use strict;
use warnings;
use Apache2::Directive();
BEGIN {
# Devel::Cover database must be writable by worker processes
my $conftree = Apache2::Directive::conftree->as_hash;
my $name = $conftree->{User}
or die "couldn't find user in Apache config";
print "user=$name\n";
my $uid = getpwnam($name);
defined $uid
or die "couldn't determine uid by name";
no warnings 'redefine';
local $> = $uid;
require Devel::Cover;
my $old_report = \&Devel::Cover::report;
*Devel::Cover::report = sub { local $> = $uid; $old_report->(@_) };
Devel::Cover->import;
}
1;
(正如你可以看到,我做了一個猴子補丁Devel::Cover
因爲startup.pl
正在root
運行,但工作進程在不同的用戶下運行,否則他們無法讀取由startup.pl
創建的目錄。如果您知道更好的解決方案, )
'-X'也許,但是不會限制'MaxRequestsPerChild'實際上會讓你的覆蓋數據比你想要的更快結束? – Kev 2015-07-25 06:10:51