で実行Devel::Cover
すると、ブロックModPerl::Registry
以外のカバレッジ情報が得られません。BEGIN
コマンドラインから、またはCGIとして同じスクリプトを実行している場合Devel::Cover
、すべてが正常に機能します(明らかに)。
Devel::Cover
ランタイムで実行されているコードを「見る」にはどうすればよいですか?
これが私のDevel::Cover
関連するものですhttpd.conf
:
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
。より良い解決策を知っている場合は、メモしてください。 .)