Есть ли способ включить трассировку в perl (эквивалентно bash -x)? - PullRequest
34 голосов
/ 04 октября 2010

У меня есть системный скрипт на Perl.Мне нужен какой-то эквивалент bash -x, чтобы определить, что не так со сценарием.Есть ли что-то эквивалентное?

РЕДАКТИРОВАТЬ: bash -x делает то, что печатает каждую строку по мере ее вычисления.Это делает код отладки, в котором отсутствует какая-либо переменная пути или файл, очень простым.

Ответы [ 4 ]

39 голосов
/ 04 октября 2010

Взгляните на Devel::Trace или Devel::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...
8 голосов
/ 17 сентября 2015

Модуль 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);
7 голосов
/ 04 октября 2010

Вы должны посмотреть на "perl -d" (включить отладчик) или "perl -c" (проверьте ваш скрипт перед выполнением

2 голосов
/ 04 октября 2010

Всегда включайте эти выражения в ваши сценарии perl:

use strict;
use warnings;

Если вы хотите отладить его, используйте переключатель -d. А вот и команды: http://www.domainavenue.com/pl-debug.htm

Надеюсь, это поможет.

...