Доступные инструменты для отладки
В Perl есть несколько инструментов для отладки и подобных задач.
Встроенный отладчик командной строки.
perl -d yourcode.pl
Графический отладчик на основе Perl / Tk, автор Эндрю Э. Пейдж.
Это бесплатный инструмент, работающий как в Linux, так и в Windows, написанный на Lisp . Исходный код не доступный.
Отладчик Perl Regex и статья о нем, написанная Марком Джейсоном Доминусом.
Я думаю, что написание тестов может в основном сократить время отладки.
Depending on what you're doing, Log::Log4perl provides an easy way to manage the 'print' style of debugging particularly in bigger applications:
Мой обычный набор инструментов:
Обычно этого достаточно. Есть ddd ; Я слышал, что это неплохо, но никогда не играл с ним.
Для некоторых задач (которые на самом деле не являются отладкой, но близки к ней) я использую Devel :: NYTProf .
Я использую ActiveState Komodo для пошаговой отладки.
Eclipse имеет шаг Пошаговый отладчик для его плагина EPIC .
Лично я предпочитаю версию ActiveState. Он просто кажется более прочным и стабильным, но стоит (а работа мне оплачивается). Если бы это были мои деньги, я бы использовал Eclipse и EPIC, поскольку они бесплатны.
Мне нравится Devel :: Trace . В основном он дает вам дамп выполнения, показывая вам пути кода.
С другой стороны, сейчас в моде разработка через тестирование, поэтому вы также можете быть заинтересованы в инструментах профилирования, таких как Devel :: NYTProf , для расширенного тестирования. См. Это сообщение в блоге Тима Банса для получения интересного обзора.
Есть много вещей, которые могут вам помочь:
*
, когда код выдает предупреждение Test :: More для написания базовых тестов, Hook :: LexWrap, Test :: MockObject, Test :: Deep, Test :: MockTime, Test :: WWW :: Mechanize и многие другие для расширенные тесты. Атрибут :: Подпись для проверки подпараметров. Carp :: Assert для программирования на основе контрактов.
Devel :: Ebug :: Wx или Devel :: ptkdb (и вскоре улучшенная поддержка в Padre) могут использоваться для упрощения отладки.
Некоторые люди используют операторы print
, чтобы увидеть, что происходит в разделах программы, которые не делают то, что, по их мнению, будет делать код. (То есть как способ проверить, что на самом деле содержится в переменной в данной точке выполнения.)
Тем не менее, вопрос довольно расплывчатый. Есть ли что-то, что вы пытаетесь сделать, что Data :: Dumper и perl -d
не помогают?
Лучшими средствами отладки являются небольшие процедуры, короткие области действия, ограниченные побочные эффекты и множество тестов. Остановите ошибки до того, как они появятся.
CGI::Dump
Benchmark
Command-line options
__DATA__ & <DATA>
$.
__FILE__ & __LINE__
warn() & die()
Используйте Devel :: SimpleTrace для наиболее элегантной отладки без сохранения состояния.
perl -MDevel :: SimpleTrace -we'warn "main"; sub foo {предупреждать "внешний"; sub {предупредить "внутренний"}}; foo () -> () '
Обычно я использую
perl -d
для отладки.
Вы также можете использовать плагин Eclipse Perl Integration (EPIC) для Eclipse. Он предлагает богатую среду отладки, доступную и интегрированную с EPIC Perl среда разработки. Вы можете его использовать, и в целом он полезен.
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;'
Лично я большой поклонник Smart :: Comments . Делает трассировку предельно простой, также нет необходимости удалять ее снова.
use Smart::Comments -ENV;
...
sub myroutine {
my ($self, @args) = @_ ;
### args: @args
...
}
Если Smart_Comments
был установлен в среде, строки, начинающиеся с ###, преобразуются в отладочный вывод с Dumper ()
используется автоматически. Если переменная среды не задана, отладочный материал полностью инертен.
Он имеет множество функций и будет выдавать индикаторы выполнения, предупреждения, условия прерывания, а также простой старый вывод отладки.
Все подходящие тесты - это все. хорошо, и я не отказываюсь от хорошей методологии разработки TDD, но когда я пытаюсь разобраться в существующей ошибке, Smart :: Comments подходит.
Если вам не нравится perl -d
, тогда Devel :: REPL и Carp :: REPL оба хороши альтернативы.