Каковы хорошие методы отладки Perl?

26
задан 11 revs, 4 users 87% 22 July 2009 в 12:01
поделиться

16 ответов

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

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


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

perl -d yourcode.pl

Devel :: ptkdb

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


Regex Coach

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


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

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


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

16
ответ дан 28 November 2019 в 06:16
поделиться

Я думаю, что написание тестов может в основном сократить время отладки.

0
ответ дан 28 November 2019 в 06:16
поделиться

Depending on what you're doing, Log::Log4perl provides an easy way to manage the 'print' style of debugging particularly in bigger applications:

  • 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
4
ответ дан 28 November 2019 в 06:16
поделиться

Мой обычный набор инструментов:

  • операторы печати и Data :: Dumper для простых случаев
  • perl -d

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

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

5
ответ дан 28 November 2019 в 06:16
поделиться

Я использую ActiveState Komodo для пошаговой отладки.

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

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

8
ответ дан 28 November 2019 в 06:16
поделиться

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

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

9
ответ дан 28 November 2019 в 06:16
поделиться

Есть много вещей, которые могут вам помочь:

  • Devel :: Trace - распечатать каждую строку, которая выполняет
  • Carp :: REPL - перейти в REPL * , когда код выдает предупреждение
  • Devel :: ebug - отладчик, которым вы можете управлять из кода Perl
  • Enbugger - используйте отладчик во время выполнения, независимо от того, используете ли вы процесс был запущен с отладкой
13
ответ дан 28 November 2019 в 06:16
поделиться

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

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

3
ответ дан 28 November 2019 в 06:16
поделиться

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

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

4
ответ дан 28 November 2019 в 06:16
поделиться

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

7
ответ дан 28 November 2019 в 06:16
поделиться

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

CGI::Dump

Benchmark

Command-line options 

__DATA__ & <DATA> 

$.

__FILE__ & __LINE__ 

warn() & die() 
0
ответ дан 28 November 2019 в 06:16
поделиться

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

perl -MDevel :: SimpleTrace -we'warn "main"; sub foo {предупреждать "внешний"; sub {предупредить "внутренний"}}; foo () -> () '

2
ответ дан 28 November 2019 в 06:16
поделиться

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

perl -d

для отладки.

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

1
ответ дан 28 November 2019 в 06:16
поделиться

During development, I like to embed printf statements in strategic places (not too many) which are enabled with a debug flag like this:

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

where the debug flag is defined at the top of the script:

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

Now instead of having to remember to comment out all of the printf lines, I just run the script as follows:

DEBUG=1 ./script.pl

After testing when everything is ready for production, the debug lines can be removed:

cat script.pl | grep -v 'if $debug;'
1
ответ дан 28 November 2019 в 06:16
поделиться

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

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

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

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

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

2
ответ дан 28 November 2019 в 06:16
поделиться

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

2
ответ дан 28 November 2019 в 06:16
поделиться
Другие вопросы по тегам:

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