Czy istnieją inne sposoby debugowania Perla oprócz Data::Dumper
i perl -d
?Jakie są dobre metody debugowania Perla?
Odpowiedz
Istnieje kilka narzędzi dostępnych w Perlu do debugowania i podobnych zadań.
Wbudowany debugger linii poleceń.
perl -d yourcode.pl
Perl/Tk oparty debugger graficzny Andrew E. Page.
To bezpłatne narzędzie działa zarówno na Linux i Windows napisane w Lisp. Kod źródłowy nie jest dostępny .
Debuger Perl Regex i artykuł o nim napisane przez Mark Jason Dominus.
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ą?
Pisanie testów może w większości przypadków skrócić czas debugowania.
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.
Sugestia: s/Dane :: Dumper/Data :: Dump /. To jest o wiele bardziej pożywne. –
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.
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.
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.
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
* REPL = Odczyt, Eval, Print Loop (= interaktywny interpreter) = –
@j_random_hacker Dzięki, jestem poza tym dzięki YAPC. –
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
Większość ludzi używa Log :: Log4perl, gdy zrobi to Log :: Message (moduł podstawowy). – MkV
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ą.
CGI::Dump
Benchmark
Command-line options
__DATA__ & <DATA>
$.
__FILE__ & __LINE__
warn() & die()
Użytkowanie, Devel :: SimpleTrace, za najbardziej elegancką Seemless bezstanowym-debugowania.
perl -MDevel :: SimpleTrace -we'warn "main"; sub foo {warn "outer"; sub {warn "inner"}}; foo() ->()”
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.
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;'
Jeśli nie podoba perl -d
następnie Devel::REPL i Carp::REPL są zarówno ładne alternatywy.
Pity Devel :: REPL wymaga łokcia 400 funtów (i różnych modułów MooseX), a Carp :: REPL zależy od Devel :: REPL – MkV
A to jest problem, ponieważ ...? – singingfish
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.
I jest to filtr źródłowy, a więc kruchy. – MkV
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.
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.
- 1. Jakie są dobre narzędzia do analizowania języka naturalnego dla Perla?
- 2. Jakie są dobre metody na znalezienie "pokrewieństwa" dwóch ciał tekstu?
- 3. Jakie są dobre metody zastępowania nazw łańcuchów haszami całkowitymi
- 4. Jakie są dobre zasoby DirectX dla początkujących?
- 5. Jakie są dobre konwencje nazewnictwa mrówek?
- 6. Jakie są dobre alternatywy dla InstallShield?
- 7. Jakie są dobre zasoby dla GNU Make?
- 8. Jakie są dobre samouczki do nauki pycURL?
- 9. Jakie są dobre zasoby do nauki Grails?
- 10. Jakie są dobre zastosowania modułów pakowanych OCaml?
- 11. Jakie są dobre "bogate" IDE dla Lispa?
- 12. Jakie są dobre zasoby Lazarus/FPC?
- 13. Jakie są niektóre narzędzia zasięgu kodu dla Perla?
- 14. Jakie są twierdzenia lub NSA, które są dobre w praktyce?
- 15. Które moduły Perla są dobre do zmieniania danych?
- 16. Jakie są dobre dystrybucje Linuksa (i metody) do rozwijania najnowszych pakietów Linux upstream (jądro, Gnome itp.)?
- 17. Jakie są najlepsze triki do debugowania za pomocą Weld/CDI?
- 18. Jakie wizualizery debugowania istnieją?
- 19. Jakie są najnowocześniejsze metody rozwiązywania równań funkcjonalnych?
- 20. Jakie są sprawdzone metody nazywania modułów Maven?
- 21. Jakie są praktyczne zastosowania wzoru metody Factory?
- 22. Jakie są sprawdzone metody zarządzania identyfikatorami zdarzeń?
- 23. Jakie metody są blokowane w JavaScript?
- 24. Jakie są dobre wyskakujące okna dialogowe dla Ruby on Rails?
- 25. Jakie są dobre ramy dokowania dla Java/Swing?
- 26. Jakie są dobre zasoby dotyczące algorytmów flokowania i roju?
- 27. Jakie są dobre narzędzia do układania, edycji i rysowania wykresów?
- 28. Jakie (dobre) biblioteki serwerów Java RADIUS są dostępne?
- 29. Jakie są dobre konwencje dotyczące Google Analytics na Androida?
- 30. Jakie są dobre przykłady bibliotek klientów REST API w JavaScript
+ WishPerl - jest ładne One Too – joe