2013-03-27 84 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