使用 Perlbrew 安装 perl-5.20.1。 perl5db.t 中的失败测试
Installing perl-5.20.1 with Perlbrew. Failed tests in perl5db.t
我正在尝试使用 Perlbrew 安装 Perl v5.20.1,但由于脚本 perl5db.t
中的测试失败而失败。我正在使用具有 64 位架构的 Ubuntu 14.04 (x86_64)。
运行:
$ perlbrew install perl-5.20.1
开始安装正常 运行 几分钟,但随后由于测试失败而中止。输出:
Test Summary Report
-------------------
../lib/perl5db.t (Wstat: 0 Tests: 119 Failed: 86)
Failed tests: 19-56, 58-60, 63-64, 66, 68-72, 74, 76-80
82-83, 85-101, 104-108, 110, 112, 114, 116-119
Files=2409, Tests=699745, 550 wallclock secs (34.45 usr 3.70 sys + 264.29 cusr 27.76 csys = 330.20 CPU)
Result: FAIL
从~/perl5/perlbrew/build.perl-5.20.1.log
可以看出第一个失败的测试是:
# Failed test 19 - Can set breakpoint in a line in the middle of the file. at ../lib/perl5db.t line 555
# got 'In MyModule.
# In Main File.
# '
# expected /(?^msx:
# ^Var=Bar$
# .*
# ^In\ MyModule\.$
# .*
# ^In\ Main\ File\.$
# .*
# )/
更新
我想我找到了有关问题原因的更多详细信息。我通过调试构建目录中的测试脚本 /home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db.t
来跟踪问题。
脚本perl5db.t
是一个用于测试Perl 调试器是否正常工作的脚本。第一个失败的测试发生在它测试是否可以在文件中间的一行上设置断点时。文件 /home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db/t/filename-line-breakpoint
看起来像:
use strict;
use warnings;
use MyModule;
my $x = "Foo";
MyModule::function();
print "In Main File.\n";
并且包含的模块 MyModule.pm
是:
package MyModule;
use strict;
use warnings;
use vars qw($var);
$var = "Bar";
sub function
{
print "In MyModule.\n";
}
1;
测试脚本然后 运行s Perl on the script using the -d
switch and the following commands to the debugger:
b ../lib/perl5db/t/MyModule.pm:12
c
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }
c
q
它期望调试器的输出类似于(即:匹配):
qr/
^Var=Bar$
.*
^In\ MyModule\.$
.*
^In\ Main\ File\.$
.*
/msx
但它得到:
In MyModule.
In Main File.
不匹配。所以问题很可能是
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }
命令,根本不产生任何输出..
此问题很可能是由于 perl5db.t
中的 bug 预期环境变量 PERLDB_OPTS
为空。但就我而言,它不是空的,而是设置为 NonStop
导致测试脚本出现故障。
我正在尝试使用 Perlbrew 安装 Perl v5.20.1,但由于脚本 perl5db.t
中的测试失败而失败。我正在使用具有 64 位架构的 Ubuntu 14.04 (x86_64)。
运行:
$ perlbrew install perl-5.20.1
开始安装正常 运行 几分钟,但随后由于测试失败而中止。输出:
Test Summary Report
-------------------
../lib/perl5db.t (Wstat: 0 Tests: 119 Failed: 86)
Failed tests: 19-56, 58-60, 63-64, 66, 68-72, 74, 76-80
82-83, 85-101, 104-108, 110, 112, 114, 116-119
Files=2409, Tests=699745, 550 wallclock secs (34.45 usr 3.70 sys + 264.29 cusr 27.76 csys = 330.20 CPU)
Result: FAIL
从~/perl5/perlbrew/build.perl-5.20.1.log
可以看出第一个失败的测试是:
# Failed test 19 - Can set breakpoint in a line in the middle of the file. at ../lib/perl5db.t line 555
# got 'In MyModule.
# In Main File.
# '
# expected /(?^msx:
# ^Var=Bar$
# .*
# ^In\ MyModule\.$
# .*
# ^In\ Main\ File\.$
# .*
# )/
更新
我想我找到了有关问题原因的更多详细信息。我通过调试构建目录中的测试脚本 /home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db.t
来跟踪问题。
脚本perl5db.t
是一个用于测试Perl 调试器是否正常工作的脚本。第一个失败的测试发生在它测试是否可以在文件中间的一行上设置断点时。文件 /home/hakon/perl5/perlbrew/build/perl-5.20.1/lib/perl5db/t/filename-line-breakpoint
看起来像:
use strict;
use warnings;
use MyModule;
my $x = "Foo";
MyModule::function();
print "In Main File.\n";
并且包含的模块 MyModule.pm
是:
package MyModule;
use strict;
use warnings;
use vars qw($var);
$var = "Bar";
sub function
{
print "In MyModule.\n";
}
1;
测试脚本然后 运行s Perl on the script using the -d
switch and the following commands to the debugger:
b ../lib/perl5db/t/MyModule.pm:12
c
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }
c
q
它期望调试器的输出类似于(即:匹配):
qr/
^Var=Bar$
.*
^In\ MyModule\.$
.*
^In\ Main\ File\.$
.*
/msx
但它得到:
In MyModule.
In Main File.
不匹配。所以问题很可能是
do { use IO::Handle; STDOUT->autoflush(1); print "Var=$var\n"; }
命令,根本不产生任何输出..
此问题很可能是由于 perl5db.t
中的 bug 预期环境变量 PERLDB_OPTS
为空。但就我而言,它不是空的,而是设置为 NonStop
导致测试脚本出现故障。