으로 Devel::Cover
을 실행할 때 BEGIN
블록을 제외하고 적용 범위 정보를 얻지 못했습니다. 명령 줄에서 또는 CGI로 Devel::Cover
을 사용하여 동일한 스크립트를 실행하면 모든 것이 올바르게 작동합니다.Devel :: Cover 및 ModPerl :: Registry와 함께 런타임에 대한 적용 범위가 없음
Devel::Cover
"런타임에 내 코드가 실행되는 것을 볼 수 있습니까?"
MaxClients 1
PerlSetEnv DEVEL_COVER_OPTIONS -db,/tmp/cover_db,-silent,1
PerlRequire /var/www/project/startup.pl
여기 startup.pl
입니다 :
여기 내 httpd.conf
에서 Devel::Cover
관련 물건 보시다시피 (내가 startup.pl
이후 Devel::Cover
에 대한 원숭이 패치를 만든
#!/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;
는
root
에 의해 운영되고있다가, 작업자 프로세스는 다른 사용자로 실행되며, 그렇지 않은 경우에는
startup.pl
으로 생성 된 디렉토리를 읽을 수 없습니다. 더 나은 해결책을 알고 있다면, 제발.
'-X' 일 수도 있지만,'MaxRequestsPerChild'가 실제로 당신이 원하는 것보다 더 빨리 당신의 커버리지 데이터를 끝내도록 제한하지 않을까요? – Kev