2010-10-04 26 views
25

Tôi có một kịch bản hệ thống trong perl. Tôi cần một số tương đương với bash -x để xác định những gì đang xảy ra với kịch bản. Có cái gì đó tương đương?Có cách nào để bật truy tìm trong perl (tương đương với bash -x) không?

CHỈNH SỬA: Điều bash -x thực hiện là nó in mỗi dòng khi được đánh giá. Điều này làm cho mã gỡ lỗi mà chỉ là thiếu một số biến đường dẫn hoặc tập tin rất dễ dàng.

+1

Giải thích những gì bạn muốn làm về những gì bạn đang muốn làm. Không xét về vỏ tùy ý cụ thể. –

+1

có thể trùng lặp của [Làm thế nào tôi có thể làm cho Perl và Python in mỗi dòng của chương trình đang được thực hiện?] (Http://stackoverflow.com/questions/2872089/how-can-i-make-perl-and-python-print -each-line-of-the-program-being-execute) – daxim

+0

có thể trùng lặp của [Một số phương pháp gỡ lỗi Perl tốt là gì?] (http://stackoverflow.com/questions/1037583/what-are-some-good- perl-gỡ lỗi-phương pháp) – Ether

Trả lời

32

Hãy xem Devel::Trace hoặc Devel::ebug.

Given chương trình này có tên là 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"; 
} 

Bạn có thể sử dụng Devel::Trace để xem việc thực hiện:

perl -d:Trace w.pl 

nào xuất ra như sau:

>> 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 lỗi thew: Không thể xác định Devel/Trace.pm trong @INC (.... – AjayKumarBasuthkar

+3

Điều này đã làm việc: PERLDB_OPTS = "NonStop AutoTrace" perl -d ./trial.pl – AjayKumarBasuthkar

2

Luôn luôn bao gồm các báo cáo trong các kịch bản perl của bạn:

use strict; 
use warnings; 

Nếu bạn muốn gỡ lỗi nó, sử dụng -d switch. Và đây là các lệnh: http://www.domainavenue.com/pl-debug.htm

Hy vọng điều đó sẽ hữu ích.

6

Bạn nên xem xét "perl -d" (bật trình gỡ lỗi) hoặc "perl -c" (kiểm tra tập lệnh của bạn trước khi cũ ecuting

+3

Được cảnh báo, Bất kỳ mã nào trong một khối 'BEGIN' (hoặc trong một mô-đun được thêm vào với' use') sẽ chạy ngay cả khi bạn sử dụng tùy chọn '-c':' perl - cle 'BEGIN {print "oops, điều này chạy"} in "nhưng điều này không"' '. –

3

Module Devel::DumpTrace đã có sẵn từ sử dụng năm 2011.

mẫu:

$ 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); 
Các vấn đề liên quan