1

我尝试使用 perl 调试器列出脚本的所有子例程,并将结果放入外部文件中。但它没有用。

我的代码:

perl -d -S myscript.pl > results.txt
  • -S= 列出所有子程序
  • -d= 调试 perl 脚本

问候,

4

2 回答 2

1

在您的主目录中,创建一个名为 .perldb 的文件,其内容如下:

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

然后运行命令

perl -d myscript.pl

如果你想扫描并列出 Perl 在运行之前看到的整个子例程:

perl -MO=Deparse -f myscript.pl

于 2013-04-05T03:23:50.167 回答
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> 

为了获得您想要的输出类型,您可以改用分析器模块 Devel::DProf。它将探查器信息输出到一个文件中,该文件可由 dprofpp 程序读取。这是获取子例程列表的示例:

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

如果您只想要您自己的脚本中的子例程,而不是从其他模块加载的子例程,请添加一个 grep 到它,例如:

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

grep "sub.*{"尽管对于了解给定程序中存在哪些子例程的特定问题,但如果您使用一致的编码风格,那么从一开始可能会更容易。

于 2013-03-27T08:53:01.463 回答