Вопрос по perl – Каковы хорошие методы отладки Perl?

26

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

Ваш Ответ

18   ответов
2

perl -d затемDevel :: REPL а такжеКарп :: РЕПЛ обе хорошие альтернативы.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
4

Вход :: Log4perl обеспечивает простой способ управления «печатью»; стиль отладки, особенно в больших приложениях:

provides various logging levels (Debug, Info, Error, Warning, Fatal) controlled from config files (easy to have debugging on development box, only errors on production box, for example) configurable by sections of your application (e.g. web app in one log file at one level, cron scripts in another at a different log level) configurable by Class - easy to quieten noisy modules, or add detailed debugging to somewhere deep within an app
Error: User Rate Limit Exceeded
3

   emacs my_script.pl
   M-x perldb
   Emacs will prompt you :
   Run perldb (like this): perl my_script.pl
   Hit enter (or add command line switches)

   Now use the debugger as usual.
   Type 'c' to continue executing the code, which will now follow
   your code as you execute through it.

   Emacs is fully integrated with its debuggers and will make debugging perl code nearly trivial.
5

print statements and Data::Dumper for simple cases perl -d

Этого обычно достаточно. Естьддд; Я слышал, что это довольно мило, но никогда не играл с этим.

Для некоторых задач (которые на самом деле не отлаживаются, но близки к этому) я используюDevel :: NYTProf.

Error: User Rate Limit Exceeded
0

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

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

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

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

use Debug::Stateme,nts;
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.

1

Вообще пользуюсь

perl -d

для отладки.

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

9

Devel :: Трассировка, В основном это дает вам дамп выполнения, показывая пути к коду.

С другой стороны, разработка через тестирование сейчас в моде, поэтому вас также могут заинтересовать такие инструменты профилирования, какDevel :: NYTProf для очень продвинутого тестирования. Видеть этоСообщение в блоге Тима Бунса за интересный обзор.

7

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

0

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


Benchmark

Command-line options 

__DATA__ & <DATA> 

$.

__FILE__ & __LINE__ 

warn() & die() 
8

ActiveState Komodo для пошаговой отладки.

Затмение имеет пошаговый отладчик для егоEPIC плагин.

Лично я предпочитаю версию ActiveState. Это кажется более надежным и стабильным, но оно стоит (и работа оплачивается за меня). Если бы это были мои деньги, я бы использовал Eclipse и EPIC, поскольку они бесплатны.

3

: More для написания базовых тестов, Hook :: LexWrap, :: MockObject, :: Deep, :: MockTime, :: WWW :: Mechanize и многие другие для расширенных тестов. Атрибут :: Подпись для проверки подпунктов. Carp :: Assert для контрактного программирования.

Devel :: Ebug :: Wx или Devel :: ptkdb (и вскоре лучшая поддержка в Padre) могут быть использованы для упрощения отладки.

13

Devel::Trace - print every line that executes Carp::REPL - drop into a REPL* when the code throws a warning Devel::ebug - a debugger you can control from Perl code Enbugger - use debugger at runtime regardless of whether your process was started with debugging
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

2

Смарт :: Комментарии, Упрощает отслеживание мертвых, и не нужно его снова удалять.

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

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

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

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

Error: User Rate Limit Exceeded
4

print операторы, чтобы увидеть, что происходит в разделах программы, которые не выполняют то, что, по их мнению, будет делать код. (То есть как способ проверки того, что на самом деле содержится в переменной в данной точке выполнения.)

Тем не менее, вопрос довольно расплывчатый. Есть ли что-то, что вы пытаетесь сделать, что Data :: Dumper иperl -d не помогаете?

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded joe
16

Доступные инструменты для отладки

В Perl доступно несколько инструментов для отладки и подобных задач.

Встроенный отладчик командной строки.

perl -d yourcode.pl

Devel :: ptkdb

Графический отладчик на основе Perl / Tk от Эндрю Э. Пейджа.

Regex Coach

Это бесплатный инструмент, работающий как на Linux, так и на Windows, написанный нашепелявость, Исходный код не имеется в наличии.

Rx: отладчик Regex для Perl

Отладчик Perl Regex и статья об этом, написанная Марком Джейсоном Доминусом.

Графический интерфейс для отладчика Perl

Error: User Rate Limit Exceeded joe
2

: SimpleTrace для самой элегантной отладки без сохранения состояния.

perl -MDevel :: SimpleTrace -we 'warn & quot; main & quot ;; sub foo {warn & quot; external & quot ;; sub {warn & quot; внутренняя & quot; }}; Foo () - & GT; () & APOS;

1

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

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

Похожие вопросы