2010-10-04 19 views
25

Perl'de bir sistem komut dosyası var. Senaryoda neyin yanlış gittiğini belirlemek için biraz eşdeğer bash -x'e ihtiyacım var. Eşdeğer bir şey var mı?Perl'de izlemeyi açmanın bir yolu var mı (bash -x'e eşdeğerdir)?

DÜZENLEME: Ne bash -x, her satırı değerlendirildiği gibi yazdırmasıdır. Bu, bazı yol değişkenlerini veya dosyalarını çok kolay bir şekilde hata ayıklama kodu yapar.

use strict; 
use warnings; 

bunu hata ayıklamak istiyorsanız

, -d anahtarını kullanın:

+1

yapmanız isteyen konum açısından ne yapmak istediğinizi açıklayın. Özel keyfi kabuğa göre değil. –

+1

olası bir kopyası [Perl ve Python'u çalıştırılan programın her bir satırını nasıl yazdırabilirim?] (Http://stackoverflow.com/questions/2872089/how-can-i-make-perl-and-python-print -onraki-program-yürütme-satır-of-the-program- – daxim

+0

olası çoğunun [Bazı iyi Perl hata ayıklama yöntemleri nelerdir?] (http://stackoverflow.com/questions/1037583/what-are-some-good- perl-debugging-methods) – Ether

cevap

32

Devel::Trace veya Devel::ebug'a bakın.

bu program w.pl adlı Verilen:

#!/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"; 
} 
Sen çalışmasını izlemek için Devel::Trace kullanabilirsiniz

:

perl -d:Trace w.pl 

şu çıktıyı üretir:

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

Perl thew hatası: @INC içinde Devel/Trace.pm bulunamıyor (.... – AjayKumarBasuthkar

+3

Bu işe yaradı: PERLDB_OPTS = "NonStop AutoTrace" perl -d ./trial.pl – AjayKumarBasuthkar

6
Sen bakmak gerekir

"perl -d" (debugger'i açın) veya "perl -c" (eskiden önce betiğinizi kontrol edin)

+3

Uyarın, "çalıştırılmadan önce" hiçbir kod çalıştırılamaz anlamına gelir. '-c' seçeneğini kullansanız bile 'BEGIN' bloğundaki herhangi bir kod (veya' use' ile dahil edilmiş olan bir modülde) çalışır: 'perl - cle 'BEGIN {print} ayy, bu "} yazdýr" yazdý ama bu "'' yapmaz. –

3

Devel::DumpTrace modülünü ecuting 2011.

Numune kullanımı yana kullanılmaktadır:

$ 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); 
İlgili konular