debugging 有没有一种方法可以在perl中打开跟踪(相当于bash -x)?

hlswsv35  于 2023-08-06  发布在  Perl
关注(0)|答案(6)|浏览(100)

我有一个Perl系统脚本。我需要一些bash -x的等价物来确定脚本的错误所在。有没有等价物?
编辑:bash -x所做的是它在评估时打印每一行。这使得调试只是缺少一些路径变量或文件的代码变得非常容易。

rpppsulh

rpppsulh1#

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

字符串
您可以使用Devel::Trace来观看执行:

perl -d:Trace w.pl


它会产生以下输出:

>> 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...

f3temu5u

f3temu5u2#

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

字符串

lh80um4z

lh80um4z3#

您应该查看“perl -d”(打开调试器)或“perl -c”(执行前检查脚本)。

cig3rfwq

cig3rfwq4#

在perl脚本中始终包含以下语句:

use strict;
use warnings;

字符串
如果要调试它,请使用-d开关。下面是命令:http://www.domainavenue.com/pl-debug.htm
希望能帮上忙。

2w3kk1z5

2w3kk1z55#

如果你运行的是当前版本的perl,你可以使用Devel::Agent。

perl -d:Agent -MDevel::Agent::EveryThing myscript.pl

字符串

e1xvtsh3

e1xvtsh36#

在Perl调试器中(通过将perl -d作为前缀来运行程序),您可以在交互式调试器中使用ttrace)命令来切换跟踪。重新加载程序(R)后,跟踪的状态将重置。不幸的是,跟踪会显著降低程序的速度,特别是在循环执行多次的情况下。
以下是一些示例输出:

...
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:10):
10:         my($class, $key, $hasher, $block_size) =  @_;
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:11):
11:         $block_size ||= 64;
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:12):
12:         $key = $hasher->new->add($key)->digest if length($key) > $block_size;
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:14):
14:         my $self = bless {}, $class;
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:15):
15:         $self->{k_ipad} = $key ^ (chr(0x36) x $block_size);
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:16):
16:         $self->{k_opad} = $key ^ (chr(0x5c) x $block_size);
Digest::HMAC::new(/usr/lib/perl5/vendor_perl/5.18.2/Digest/HMAC.pm:17):
17:         $self->{hasher} = $hasher->new->add($self->{k_ipad});
Digest::SHA::new(/usr/lib/perl5/5.18.2/x86_64-linux-thread-multi/Digest/SHA.pm:45):
45:             my($class, $alg) = @_;
...

字符串

相关问题