2012-08-17 59 views
2

如何調試在另一個perlscript中使用的perl腳本。我們可以分別進行調試。是否可以一步調試?如何調試在另一個perlscript中使用的perl腳本?

例:

!/user/bin/perl 

my $param= 8; 

my @res=\`perl extract.pl $config`; 

print "The results is .... @res\n"; 

同樣,我們可以調試shell腳本內部使用的Perl腳本?

謝謝。

+0

看來,一次調試兩個程序只會使事情複雜化。爲什麼僅僅讓被調用程序獨立工作是不夠的? – Borodin 2012-08-17 13:00:55

+0

@Borodin,我不知道我理解這個投訴。雖然單獨測試組件是一種很好的做法,但測試集成系統也是必要的。這樣做時,能夠一次調試多個組件是非常有用的。 – dan1111 2012-08-17 14:24:34

+0

測試系統與調試系統不同。系統沒有完全被調試 - 模塊化的一點是,假設所有的依賴關係被調試和運行,或者至少不是程序員的責任,那麼可以獨立地處理小塊代碼。但是,如果被調用的代碼不是獨立的,而是真的是主程序的一部分,那麼它的設計是錯誤的 – Borodin 2012-08-17 14:55:09

回答

4

一個動態解決方案:

my $dswitch = $INC{"perl5db.pl"} ? "-d" : ""; 
my @res=`perl $dswitch extract.pl $config`; 

$INC{"perl5db.pl"}是真實的,當你使用調試器,假當你不在。

+0

非常感謝動態解決方案。 – 2012-08-20 06:37:40

4

您可以添加-d切換到要調用的腳本的shebang行:

#!/usr/bin/perl -d 
+0

謝謝。它的工作正常。 – 2012-08-20 06:38:07

0

只是調試extract.pl傳入價值$config。如果你不知道它是什麼,古老的printf會爲你做到這一點。

say "\$config='$config'"; 

然後執行:

perl -d extract.pl 'Stuff that printed in config'. 

由於兩個是分離的過程,唯一的通信是什麼傳遞在命令行上的與由被調用的腳本打印。所以被調用的腳本應該能夠在沒有調用腳本的情況下被測試。 (除非你設置了某種IPC或共享內存或類似的技巧)

3

「正確」的事情是改變你的設計,所以你不通過系統命令調用另一個腳本。那麼你將有一個單一的調試環境。

最好的設計是將extract.pl製作成模塊。

您也可以使用do命令從其他文件導入代碼:do 'extract.pl'。那麼需要的唯一更改可能就是您通過$config英寸的方式。

這兩種方法中的任何一種都可以非常簡單地實施,並且可以爲持續開發提供其他好處。也許你有一個很好的理由不這樣做,但如果你還沒有這樣做,我會首先考慮這一點。

相關問題