如何調試在另一個perlscript中使用的perl腳本。我們可以分別進行調試。是否可以一步調試?如何調試在另一個perlscript中使用的perl腳本?
例:
!/user/bin/perl
my $param= 8;
my @res=\`perl extract.pl $config`;
print "The results is .... @res\n";
同樣,我們可以調試shell腳本內部使用的Perl腳本?
謝謝。
如何調試在另一個perlscript中使用的perl腳本。我們可以分別進行調試。是否可以一步調試?如何調試在另一個perlscript中使用的perl腳本?
例:
!/user/bin/perl
my $param= 8;
my @res=\`perl extract.pl $config`;
print "The results is .... @res\n";
同樣,我們可以調試shell腳本內部使用的Perl腳本?
謝謝。
一個動態解決方案:
my $dswitch = $INC{"perl5db.pl"} ? "-d" : "";
my @res=`perl $dswitch extract.pl $config`;
$INC{"perl5db.pl"}
是真實的,當你使用調試器,假當你不在。
非常感謝動態解決方案。 – 2012-08-20 06:37:40
您可以添加-d
切換到要調用的腳本的shebang行:
#!/usr/bin/perl -d
謝謝。它的工作正常。 – 2012-08-20 06:38:07
只是調試extract.pl
傳入價值$config
。如果你不知道它是什麼,古老的printf會爲你做到這一點。
say "\$config='$config'";
然後執行:
perl -d extract.pl 'Stuff that printed in config'.
由於兩個是分離的過程,唯一的通信是什麼傳遞在命令行上的與由被調用的腳本打印。所以被調用的腳本應該能夠在沒有調用腳本的情況下被測試。 (除非你設置了某種IPC或共享內存或類似的技巧)
「正確」的事情是改變你的設計,所以你不通過系統命令調用另一個腳本。那麼你將有一個單一的調試環境。
最好的設計是將extract.pl製作成模塊。
您也可以使用do
命令從其他文件導入代碼:do 'extract.pl'
。那麼需要的唯一更改可能就是您通過$config
英寸的方式。
這兩種方法中的任何一種都可以非常簡單地實施,並且可以爲持續開發提供其他好處。也許你有一個很好的理由不這樣做,但如果你還沒有這樣做,我會首先考慮這一點。
看來,一次調試兩個程序只會使事情複雜化。爲什麼僅僅讓被調用程序獨立工作是不夠的? – Borodin 2012-08-17 13:00:55
@Borodin,我不知道我理解這個投訴。雖然單獨測試組件是一種很好的做法,但測試集成系統也是必要的。這樣做時,能夠一次調試多個組件是非常有用的。 – dan1111 2012-08-17 14:24:34
測試系統與調試系統不同。系統沒有完全被調試 - 模塊化的一點是,假設所有的依賴關係被調試和運行,或者至少不是程序員的責任,那麼可以獨立地處理小塊代碼。但是,如果被調用的代碼不是獨立的,而是真的是主程序的一部分,那麼它的設計是錯誤的 – Borodin 2012-08-17 14:55:09