代码之家  ›  专栏  ›  技术社区  ›  codeholic

Devel::Cover和ModPerl::Registry不覆盖运行时

  •  3
  • codeholic  · 技术社区  · 15 年前

    当我跑步的时候 Devel::Cover 具有 ModPerl::Registry BEGIN 阻碍。当我运行相同的脚本时 Devel::封面 从命令行或作为一个CGI,一切工作正常(显然)。

    我该怎么做 Devel::封面

    这是 Devel::封面 我的相关资料 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::封面 自从 正在运行 root ,但工作进程在不同的用户下运行,否则它们无法读取由 启动.pl . 如果你知道更好的解决方案,请记下。)

    2 回复  |  直到 15 年前
        1
  •  1
  •   rhesa    14 年前

    尝试使用 -X 切换,使其作为单个进程运行。您也可以设置 MaxRequestsPerChild

        2
  •  1
  •   Perrin Harkins    11 年前

    我认为是因为Devel::Cover来得太晚,无法添加钩子,也就是说,在编译完所有代码之后。我试着加上 use Devel::Cover 在startup.pl开始时,或者 PerlModule Devel::Cover 在httpd.conf中的其他mod_perl内容之前。

    推荐文章