2013-03-27 71 views
1

我試圖用perl調試器列出腳本的所有子例程,並將結果放到外部文件中。但它沒有奏效。perl調試器輸出到文件(Windows)

我的代碼:

perl -d -S myscript.pl > results.txt 
  • -S =列表中的所有子程序
  • -d =調試perl腳本

映入眼簾,

+0

'perl -h'表示'-S使用PATH環境變量查找程序文件。列出所有子程序?從來沒有聽說過這個開關。 – TLP 2013-03-27 08:33:07

+0

TLP,它們將調試器中的命令與命令行開關混淆。 – 2013-03-27 08:46:59

回答

1

的-S不應該是用作命令行開關。運行perl -d將啓動調試器進程,並且您可以在其中使用的命令之一是S

例子:

$ perl -d tmp/splithttpdconf.pl 

Loading DB routines from perl5db.pl version 1.28 
Editor support available. 

Enter h or `h h' for help, or `man perldebug' for more help. 

main::(tmp/splithttpdconf.pl:6):  my $basedir = shift; 

DB<1> S main:: 
main::BEGIN 
main::debug 
main::splitconf 

DB<2> 

爲了得到你想要的,你可以使用Profiler模塊傑韋利:: DProf代替的輸出類型。它會將分析器信息輸出到可由dprofpp程序讀取的文件中。下面是一個例子來獲得子程序的列表:

perl -d:DProf perlscript.pl; dprofpp -T 

如果你只想要自己的腳本中的子程序,而不是那些來自其他模塊的加載,加grep來它,例如:

perl -d:DProf perlscript.pl; dprofpp -T | grep main:: 

雖然對於知道給定程序中存在哪些子例程的特定問題,但假如您使用一致的編碼風格,那麼只需執行grep "sub.*{"即可。

+0

感謝您的答案, 我的問題是,我想執行一個perl調試器命令 ,並直接在一個命令中得到輸出文件的結果。 在你的例子中,我將不得不執行兩個單獨的命令和 我不能得到結果到輸出文件。 Greets, – Silence 2013-03-27 09:41:00

+0

好的,你需要使用另一個perl模塊來做到這一點。我將添加信息。 – 2013-03-27 10:14:37

+0

感謝它的工作! 但是沒有辦法將此應用於perl調試器的每個命令? Greets, – Silence 2013-03-28 06:46:56

1

在你的主目錄,創建一個名爲.perldb與文件,內容如下:

parse_options("NonStop=1 LineInfo=results.txt AutoTrace=1 frame=2");

然後運行命令

perl -d myscript.pl

如果你要掃描和列表整個子程序是Perl在運行之前看到的:

perl -MO=Deparse -f myscript.pl