Есть ли способ включить трассировку в perl (эквивалентно bash -x)?
У меня есть система script в perl. Мне нужен какой-то эквивалент bash -x, чтобы определить, что происходит с script. Есть ли что-то эквивалентное?
EDIT: Что делает bash -x, так это то, что он печатает каждую строку по мере ее вычисления. Это делает код отладки, который просто пропускает некоторую переменную пути или файл очень легко.
Ответы
Ответ 1
Взгляните на 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...
Ответ 2
Вы должны посмотреть "perl -d" (включить отладчик) или "perl -c" (проверьте свой script перед выполнением
Ответ 3
Всегда включайте эти утверждения в свои perl-скрипты:
use strict;
use warnings;
Если вы хотите отладить его, используйте переключатель -d
. И вот команды: http://www.domainavenue.com/pl-debug.htm
Надеюсь, что это поможет.
Ответ 4
Модуль 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);