2009-06-24 15 views

Odpowiedz

16

Available tools for debugging

Istnieje kilka narzędzi dostępnych w Perlu do debugowania i podobnych zadań.


Wbudowany debugger linii poleceń.

perl -d yourcode.pl 

Devel::ptkdb

Perl/Tk oparty debugger graficzny Andrew E. Page.


Regex Coach

To bezpłatne narzędzie działa zarówno na Linux i Windows napisane w Lisp. Kod źródłowy nie jest dostępny .


Rx: A Regex Debugger for Perl

Debuger Perl Regex i artykuł o nim napisane przez Mark Jason Dominus.


A GUI for the Perl Debugger

+1

+ WishPerl - jest ładne One Too – joe

4

Niektórzy używają print sprawozdań aby zobaczyć, co się dzieje w odcinkach programu, który nie robi tego, co myśleli kod zrobi. (Tj. Jako sposób sprawdzenia, co jest rzeczywiście zawarte w zmiennej w danym miejscu wykonania).

To powiedziawszy, pytanie jest dość niejasne. Czy jest coś, co próbujesz zrobić, że Data :: Dumper i perl -d nie pomagają?

+0

Jej nie podoba. tylko ciekawość chcą wiedzieć inny sposób Perl debugowania – joe

+2

lubię używać „ostrzec” zamiast „print”, tak to idzie do stderr a nie standardowe wyjście. "print STDERR" również działa, ale wymaga więcej pisania. – laalto

0

Pisanie testów może w większości przypadków skrócić czas debugowania.

5

Mój zwykły zakres narzędzi jest:

  • wydruku sprawozdania i dane :: Dumper dla prostych przypadkach
  • perl -d

To wystarczy zwykle. Istnieje ddd; Słyszałem, że to całkiem miłe, ale nigdy z nim nie grałem.

W przypadku niektórych zadań (które nie są naprawdę debugowania, ale blisko niego) używam Devel::NYTProf.

+2

Sugestia: s/Dane :: Dumper/Data :: Dump /. To jest o wiele bardziej pożywne. –

9

Podoba mi się Devel::Trace. Zasadniczo daje zrzut wykonawczy, pokazując ścieżki kodu.

Po drugiej stronie, Test Driven Development jest teraz bardzo wkurzony, więc możesz również być zainteresowany narzędziami do profilowania, takimi jak Devel::NYTProf do wysoce zaawansowanych testów. Zobacz ten Tim bunce's blog post, aby uzyskać interesujący przegląd.

8

Używam ActiveState Komodo do debugowania krok po kroku.

Eclipse ma debugger krok po kroku dla jego EPIC plugin.

Osobiście preferuję wersję ActiveState. Wydaje się, że jest bardziej stabilny i stabilny, ale kosztuje (a praca mnie opłaca). Gdyby to były moje pieniądze, użyłbym Eclipse i EPIC, ponieważ są one bezpłatne.

3

Test :: Więcej za pisanie testów podstawowych, Hook :: LexWrap, Test :: MockObject, Test :: Deep, Test :: MockTime, Test :: WWW :: Mechanize i wiele innych dla zaawansowanych testów. Atrybut :: Sygnatura do sprawdzania podparametrów. Carp :: Twierdzenie o programowaniu kontraktowym.

Devel :: Ebug :: Wx lub Devel :: ptkdb (i wkrótce lepsza obsługa w Padre) może być użyty do łatwiejszego debugowania.

13

Istnieje wiele rzeczy tam, aby pomóc:

  • Devel::Trace - wydrukować każdy wiersz, który wykonuje
  • Carp::REPL - spadek do REPL * gdy kod generuje ostrzeżenie
  • Devel::ebug - debugger, który możesz kontrolować z kodu Perl
  • Enbugger - używaj debuggera w środowisku uruchomieniowym, niezależnie od tego, czy proces został uruchomiony z debugowaniem
+0

* REPL = Odczyt, Eval, Print Loop (= interaktywny interpreter) = –

+0

@j_random_hacker Dzięki, jestem poza tym dzięki YAPC. –

4

W zależności od tego, co robisz, Log::Log4perl pozwala w łatwy sposób zarządzać „Print” styl debugowania szczególnie w większych aplikacjach:

  • przewiduje różne poziomy logowania (Debug, Info, Błąd, Ostrzeżenie , Fatal)
  • kontrolowane z plików konfiguracyjnych (łatwe do debugowania w skrzynce deweloperskiej, na przykład tylko błędy w polu produkcyjnym)
  • konfigurowalny według sekcji aplikacji (np. Aplikacja internetowa w jednym pliku dziennika na jednym poziomie, skrypty crona w inny na innym poziomie log)
  • konfigurowalne przez klasy - Easy uspokoić hałaśliwych moduły lub dodać szczegółowe debugowanie gdzieś głęboko wewnątrz aplikacji
+0

Większość ludzi używa Log :: Log4perl, gdy zrobi to Log :: Message (moduł podstawowy). – MkV

7

najlepsze narzędzia do debugowania to małe procedury, krótkie zakresy, ograniczone efekty uboczne i wiele testów. Zatrzymaj błędy, zanim się wyklują.

0

Some Other methods

CGI::Dump 

Benchmark 

Command-line options 

__DATA__ & <DATA> 

$. 

__FILE__ & __LINE__ 

warn() & die() 
2

Użytkowanie, Devel :: SimpleTrace, za najbardziej elegancką Seemless bezstanowym-debugowania.

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

1

Generalnie używam

perl -d 

do debugowania.

Możesz również użyć wtyczki Eclipse Perl Integration (EPIC) dla Eclipse. Oferuje bogate środowisko debugowania dostępne i zintegrowane ze środowiskiem programistycznym EPIC Perl. Możesz go używać i jest ogólnie pomocny.

1

trakcie rozwoju, chciałbym umieścić printf w strategicznych miejscach (nie za dużo), które są włączone z flagą debugowania tak:

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

gdzie flagi debug jest zdefiniowana na początku skryptu :

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

teraz zamiast pamiętać, aby skomentować na wszystkich liniach printf, po prostu uruchomić skrypt w następujący sposób:

DEBUG=1 ./script.pl 

Po badań, gdy wszystko jest już gotowe do produkcji, linie debugowania można usunąć:

cat script.pl | grep -v 'if $debug;' 
2

Jeśli nie podoba perl -d następnie Devel::REPL i Carp::REPL są zarówno ładne alternatywy.

+0

Pity Devel :: REPL wymaga łokcia 400 funtów (i różnych modułów MooseX), a Carp :: REPL zależy od Devel :: REPL – MkV

+0

A to jest problem, ponieważ ...? – singingfish

2

Osobiście jestem wielkim fanem Smart::Comments. Sprawia, że ​​śledzenie staje się proste i nie trzeba go ponownie rozbierać.

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

Jeśli Smart_Comments został ustawiony w środowisku, linie począwszy ### są konwertowane na wyjście diagnostyczne, z Dumper() używane automagicznie. Jeśli zmienna środowiskowa nie jest ustawiona, elementy debugowania są całkowicie obojętne.

Ma mnóstwo funkcji i będzie produkować paski postępu, ostrzeżeń, przerwać warunki jak zwykły stary wyjście debugowania.

Odpowiednie testy są dobre i nie odrzucam dobrej metodologii rozwoju TDD, ale kiedy próbuję dojść do sedna istniejącego błędu, Inteligentne :: Komentarze są gotowe.

+0

I jest to filtr źródłowy, a więc kruchy. – MkV

3

Emacs, ręce w dół.

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

zapewnia łatwy sposób wstawiania i włączania/wyłączania instrukcji drukowania w celu debugowania.

d() funkcja drukuje nazwę zmiennej, jej wartość, a nazwy podprogramu. Implementacja została zoptymalizowana, aby zminimalizować naciskanie klawiszy programisty.

Oto przykładowy kod, aby dostać się zaczęło:

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

wyjściowa: dostępny dostosować wyjścia są

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 
} 

Wiele opcji. Pełną dokumentację można znaleźć na CPAN.

Powiązane problemy