2

Perlbrew で Perl v5.20.1 をインストールしようとしていますが、スクリプトのテストが失敗したために失敗しますperl5db.t。64 ビット アーキテクチャ (x86_64) の Ubuntu 14.04 を使用しています。

ランニング:

$ 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;

次に、テスト スクリプトは、-dスイッチと次のコマンドをデバッガーに使用して、スクリプトで Perl を実行します。

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"; }

このコマンドは、まったく出力を生成しません。

4

1 に答える 1

1

この問題は、環境変数が空であることを予期していたバグが原因である可能性が最も高いです。しかし、私の場合は空ではなく、テストスクリプトの誤動作を引き起こすように設定されていました。perl5db.tPERLDB_OPTSNonStop

于 2016-12-31T09:19:55.197 に答える