Каковы хорошие методы отладки Perl? - PullRequest
26 голосов
/ 24 июня 2009

Есть ли другие способы отладки Perl, кроме Data::Dumper и perl -d?

Ответы [ 18 ]

2 голосов
/ 11 октября 2009

Лично я большой поклонник Smart :: Комментарии . Упрощает отслеживание мертвых объектов, нет необходимости удалять их снова.

use Smart::Comments -ENV;
...
sub myroutine {
    my ($self, @args) = @_ ;
    ### args: @args
    ...
}

Если в среде установлено значение Smart_Comments, строки, начинающиеся с ###, преобразуются в выходные данные отладки, а Dumper() используется автоматически. Если переменная окружения не установлена, отладочная информация полностью инертна.

Он имеет кучу функций и будет генерировать индикаторы выполнения, предупреждения, условия отмены, а также обычный старый отладочный вывод.

Все подходящие тесты хороши, и я не отказываюсь от хорошей методологии разработки TDD, но когда пытаюсь докопаться до существующей ошибки, Smart :: Comments - это путь.

2 голосов
/ 11 октября 2009

Если вам не нравится perl -d, тогда Devel :: REPL и Carp :: REPL являются хорошими альтернативами.

2 голосов
/ 27 августа 2009

Используйте, Devel :: SimpleTrace, для самой элегантной отладки без состояния.

perl -MDevel :: SimpleTrace -we'warn "main"; sub foo {warn "external"; sub {warn "inner"}}; Foo () -> ()

1 голос
/ 11 октября 2009

Во время разработки мне нравится встраивать операторы printf в стратегические места (не слишком много), которые активируются с помощью флага отладки, например:

printf("h='$h', j='$j', ... (%d)\n", __LINE__) if $debug;

где флаг отладки определен в верхней части скрипта:

my $debug = $ENV{DEBUG} || 0;

Теперь вместо того, чтобы помнить о необходимости закомментировать все строки printf, я просто запускаю скрипт следующим образом:

DEBUG=1 ./script.pl

После тестирования, когда все готово к производству, строки отладки можно удалить:

cat script.pl | grep -v 'if $debug;'
1 голос
/ 04 сентября 2009

Обычно я использую

perl -d

для отладки.

Вы также можете использовать плагин Eclipse Perl Integration (EPIC) для Eclipse. Он предлагает богатую среду отладки, доступную и интегрированную со средой разработки EPIC Perl. Вы можете использовать его и, как правило, полезно.

0 голосов
/ 05 января 2015

Debug :: Statements предоставляет простой способ вставки и включения / отключения операторов печати для отладки.

Функция d () печатает имя вашей переменной, ее значение и имя вашей подпрограммы. Реализация оптимизирована для минимизации нажатий клавиш программистом.

Вот пример кода, с которого можно начать:

my $myvar = 'some value';
my @list = ('zero', 1, 'two', "3");
my %hash = ('one' => 2, 'three' => 4);

use Debug::Statements;
my $d = 1;
d "Hello world";
d '$myvar';
d '@list %hash';

Выход:

DEBUG sub mysub:  Hello world
DEBUG sub mysub:  $myvar = 'some value'
DEBUG sub mysub:  @list = [
  'zero',
  1,
  'two',
  '3'
]
DEBUG sub mysub:  %hash = {
  'one' => 2,
  'three' => 4
}

Многие параметры доступны для настройки вывода. Полную документацию можно найти на CPAN.

0 голосов
/ 08 июля 2009

Некоторые другие методы

CGI::Dump

Benchmark

Command-line options 

__DATA__ & <DATA> 

$.

__FILE__ & __LINE__ 

warn() & die() 
0 голосов
/ 24 июня 2009

Написание тестов, в основном, может сократить время отладки.

...