有没有办法打开perl中的跟踪(相当于bash -x)?

Let*_*_Be 36 debugging perl trace

我在perl中有一个系统脚本.我需要一些等效的bash -x来确定脚本出了什么问题.有没有相当的东西?

编辑:bash -x的作用是它在评估时打印每一行.这使得调试代码只是缺少一些路径变量或文件非常容易.

Cha*_*ens 42

看看Devel::TraceDevel::ebug.

鉴于这个程序命名为w.pl:

#!/usr/bin/perl

use strict;
use warnings;

my $answer = 42;

if ($answer == 6 * 9) {
    print "everything is running fine.\n";
} else {
    warn "there must be a bug somewhere...\n";
}
Run Code Online (Sandbox Code Playgroud)

您可以Devel::Trace用来观察执行:

perl -d:Trace w.pl
Run Code Online (Sandbox Code Playgroud)

其中产生以下输出:

>> w.pl:6: my $answer = 42;
>> w.pl:8: if ($answer == 6 * 9) {
>> w.pl:11:     warn "there must be a bug somewhere...\n";
there must be a bug somewhere...
Run Code Online (Sandbox Code Playgroud)

  • 当然你需要先安装模块:`sudo cpan install "Devel::Trace"`。 (5认同)
  • 这有效:PERLDB_OPTS ="NonStop AutoTrace"perl -d ./trial.pl (4认同)

Rag*_*ram 8

您应该查看"perl -d"(打开调试器)或"perl -c"(在执行之前检查脚本)

  • 请注意,"在执行之前"并不意味着没有代码运行.在`BEGIN`块中的任何代码(或除已包含`use`模块),即使你使用`-c`选项将运行:`perl的-cle"BEGIN {打印'哎呀,这个运行’}打印"但这不是"'`. (3认同)

mob*_*mob 8

Devel::DumpTrace模块自2011年开始供货.

样品用法:

$ cat demo.pl
# demo.pl
# a demonstration of Devel::DumpTrace
$a = 1;
$b = 3;
$c = 2 * $a + 7 * $b;
@d = ($a, $b, $c + $b);

$ perl -d:DumpTrace demo.pl
>>>>> demo.pl:3:        $a:1 = 1;
>>>>> demo.pl:4:        $b:3 = 3;
>>>>> demo.pl:5:        $c:23 = 2 * $a:1 + 7 * $b:3;
>>>>> demo.pl:6:        @d:(1,3,26) = ($a:1, $b:3, $c:23 + $b:3);
Run Code Online (Sandbox Code Playgroud)