2010-10-04 12 views
25

Mam skrypt systemowy w Perlu. Potrzebuję odpowiednika basha -x, aby ustalić, co jest nie tak ze skryptem. Czy jest coś podobnego?Czy istnieje sposób, aby włączyć śledzenie w Perl (odpowiednik bash -x)?

EDYTOWANIE: Bash -x ma to, że wypisuje każdą linię w trakcie jej oceny. To sprawia, że ​​kod debugowania, który po prostu brakuje jakiejś zmiennej ścieżki lub pliku jest bardzo łatwy.

+1

Wyjaśnij, co chcesz robić w kategoriach tego, co pan chce zrobić. Nie pod względem konkretnej arbitralnej powłoki. –

+1

możliwy duplikat [W jaki sposób mogę sprawić, by Perl i Python wydrukowały każdą linię wykonywanego programu?] (Http://stackoverflow.com/questions/2872089/how-can-i-make-perl-and-python-print -ach-line-of-the-program-being-execution) – daxim

+0

możliwy duplikat [Jakie są dobre metody debugowania Perla?] (http://stackoverflow.com/questions/1037583/what-are-some-good- perl-debugging-methods) – Ether

Odpowiedz

32

Spójrz na Devel::Trace lub Devel::ebug.

Biorąc to program o nazwie w.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $answer = 42; 

if ($answer == 6 * 9) { 
    print "everything is running fine.\n"; 
} else { 
    warn "there must be a bug somewhere...\n"; 
} 

Można użyć Devel::Trace obserwować wykonanie:

perl -d:Trace w.pl 

która produkuje następujące dane wyjściowe:

>> w.pl:6: my $answer = 42; 
>> w.pl:8: if ($answer == 6 * 9) { 
>> w.pl:11:  warn "there must be a bug somewhere...\n"; 
there must be a bug somewhere... 
+2

Błąd perl: nie można zlokalizować Devel/Trace.pm w @INC (.... – AjayKumarBasuthkar

+3

To działało: PERLDB_OPTS = "NonStop AutoTrace" perl -d ./trial.pl – AjayKumarBasuthkar

6

Należy spojrzeć na "perl -d" (włącz debugger) lub "perl -c" (sprawdź swój skrypt przed ex ecuting

+3

Ostrzegam, "przed wykonaniem" nie oznacza, że ​​żaden kod nie działa, dowolny kod w bloku 'BEGIN' (lub w module, który został dołączony do' use') będzie działał, nawet jeśli użyjesz opcji '-c': perl - cle 'BEGIN {print "oops, to działa"} print ", ale to nie" ". –

3

Moduł Devel::DumpTrace jest dostępna od użycia 2011.

Sample:

$ cat demo.pl 
# demo.pl 
# a demonstration of Devel::DumpTrace 
$a = 1; 
$b = 3; 
$c = 2 * $a + 7 * $b; 
@d = ($a, $b, $c + $b); 

$ perl -d:DumpTrace demo.pl 
>>>>> demo.pl:3:  $a:1 = 1; 
>>>>> demo.pl:4:  $b:3 = 3; 
>>>>> demo.pl:5:  $c:23 = 2 * $a:1 + 7 * $b:3; 
>>>>> demo.pl:6:  @d:(1,3,26) = ($a:1, $b:3, $c:23 + $b:3); 
Powiązane problemy