2009-06-24 7 views

ответ

16

Available tools for debugging

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


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

perl -d yourcode.pl 

Devel::ptkdb

Perl/Tk графический отладчик Эндрю E. Страница.


Regex Coach

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


Rx: A Regex Debugger for Perl

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


A GUI for the Perl Debugger

+1

+ WishPerl - тоже неплохо – joe

4

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

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

+0

Его не нравится. просто любопытство хочет узнать другой способ отладки Perl – joe

+2

Мне нравится использовать «warn» вместо «print», поэтому он идет в stderr, а не в stdout. «print STDERR» работает тоже, но требует большего набора текста. – laalto

0

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

5

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

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

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

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

+2

Предложение: s/Данные :: Дампер/Данные :: Дамп /. Это более питательно. –

9

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

С другой стороны, разработка Test Driven Development является настоящей яростью, поэтому вы также можете быть заинтересованы в инструментах для профилирования, таких как Devel::NYTProf для высокотехнологичного тестирования. См. Это Tim bunce's blog post для интересного обзора.

8

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

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

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

3

Тест :: Больше для написания базовых тестов, Hook :: LexWrap, Test :: MockObject, Test :: Deep, Test :: MockTime, Test :: WWW :: Mechanize и многие другие для расширенных тестов. Attribute :: Подпись для проверки подпараметров. Carp :: Assert for contract-based programming.

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

13

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

  • Devel::Trace - печать каждой строки, которая выполняет
  • Carp::REPL - капля в РЕПЛ * когда код генерирует предупреждение
  • Devel::ebug - это отладчик, который вы можете контролировать из кода Perl
  • Enbugger - использовать отладчик во время выполнения независимо от того, был ли запущен ваш процесс с отладкой
+0

* REPL = Read, Eval, Print Loop (== интерактивный интерпретатор) –

+0

@j_random_hacker Спасибо, я вне его благодаря YAPC. –

4

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

  • обеспечивает различные уровни ведения журнала (Debug, Info, ошибка, предупреждение , Fatal)
  • управляется из конфигурационных файлов (легко можно отлаживать в области разработки, например, только ошибки на рабочей коробке)
  • , настраиваемый по разделам вашего приложения (например, веб-приложение в одном файле журнала на одном уровне, хрон скрипты в другой на другом уровне протокола)
  • настраивается с помощью класса - легко утихомирить шумных модулей или добавить детальную отладку где-то глубоко внутри приложения
+0

Большинство пользователей используют Log :: Log4perl, когда Log :: Message (основной модуль) будет делать. – MkV

7

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

2

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

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

1

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

perl -d 

для отладки.

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

1

Во время разработки, я хотел бы внедрить 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;' 
2

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

+0

жалость Devel :: REPL требует 400 фунтов Moose (и различные модули MooseX), а Carp :: REPL зависит от Devel :: REPL – MkV

+0

И это проблема, потому что ...? – singingfish

2

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

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

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

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

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

+0

И это исходный фильтр, следовательно, хрупкий. – MkV

3

Emacs, руки вниз.

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. 
0

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.

Смежные вопросы