2011-01-14 21 views

cevap

7

Komut dosyanızın en üstünde bulunan shebang satırına -d anahtarını eklemeyi denediniz mi? Bu gerçekten başlattı alır, ama en azından basit durumlarda bu hata ayıklayıcı başlamalı tam olarak nasıl değişir

#!/usr/bin/perl -d 
use strict; 
use warnings; 
$|=1;$\="\n"; 

print "Test"; 

gibi bir şey.

Düzenleme: Ardından

> b [line] [condition] 

kullanarak belli bir koşulu ile belirli bir hat üzerinde bir kesme noktası ayarlamak ve komut dosyası çalıştırılırken devam etmek

> c 

vurabilir - ayıklayıcı durur koşul karşılandığında belirtilen satır

+0

Bu harika. Pencerelerde benzer sözdizimi var mı? – Thomson

+1

Gerçek perl çalıştırılabilir başlatmasının shebang'de listelenmemiş olmasına rağmen perl'in anahtarlara saygı göstereceğine inanıyorum - örneğin yukarıdaki betik C: \ Perl \ bin \ perl.exe script.pl olarak başlatılmış olsa bile yine de hata ayıklayıcısını başlatmalı – ivancho

3

Kesin noktalar gibi bir şey yapmanıza olanak sağlayacak bir şey var, ancak işlevsellik daha geniş: Perl Debugger.

+0

Bu, başlatma yöntemini değiştiremediğimde (çalıştırılabilir dosya başına komut satırı) çalışabilir mi? – Thomson

+1

başlatma yöntemi esastır, -d – Thariama

2

Esasen, -d anahtarı, perl yürütülebilir ile iletişim kurmanızı ve perl yürütülebilir dosyasının sizinle iletişim kurmasını sağlar. $DB::single - Ben doğru anlamak

More

+0

seçeneği olmadan hata ayıklayıcısını kullanamazsınız Perl kod parçam büyük bir sistemin parçasıdır ve nasıl başlatıldığını kontrol edemiyorum. Görünüşe göre sadece kaynak dosyaya dönüştürebilirim. – Thomson

+3

@Thomson Tan: Bu durumda, günlüğe kaydetme daha iyi çalışır. [Log :: Log4perl] 'a bir göz atın (http://search.cpan.org/perldoc?Log::Log4perl). –

34

, kodunuzda belirli ayıklayıcı değişkeni kullanmak gerekir. Bunu kodunuzda doğru bir değere ayarlamak, hata ayıklayıcının bu satırda durmasına neden olur.

$x = 1234; 
$DB::single = 1; 
enter_problematic_sub_now(); 

gerçekte kod var o zaman hata ayıklayıcıda çalıştığından emin olun olamazsa o zaman, 1. Tabii ki

için $ DB doğrultusunda :: tek set durur Kodunuz Tamamen başka bir sorun. , kodunuzu perl -d aracılığıyla da çalıştırmanız gerekir.

+0

Programım hata ayıklayıcıda çalışmıyorsa, beklediğim gibi $ DB :: single kullanamaz mıyım? – Thomson

+3

@Thompson: Evet, doğru. Bir Perl programının hata ayıklanmasını istiyorsanız, bunu bir hata ayıklayıcısının altında çalıştırmanız gerekir. Bilgimden en iyi şekilde, bu tür şeyler, diğer dillerdeki kaynak tabanlı gerçek zamanlı hata ayıklamalarının çoğu için geçerlidir - buna rağmen kümelenmelerin postmortemleri. – tchrist

+0

@tchrist Python'da dahili olarak nasıl çalıştığından emin değilim, ancak pdb'yi içe aktarabilirim; pdb.set_trace() 'kodu bu noktada kırmak ve hata ayıklayıcısına girmek. Komut dosyasını herhangi bir özel hata ayıklama değiştiricisi ile çalıştırmak zorunda değilim. –

İlgili konular