如何在Perl程序中的特定文件上设置断点?

eve*_*box 20 perl

我的Perl程序看起来像:

foo/
foo/bar/
for/bar/test.pm
foo.pm
foo/bar.pm
test.pl
Run Code Online (Sandbox Code Playgroud)

并用于perl test.pl启动该程序.我想在foo/bar/test.pm中调试一个sub.如何在该子上设置断点?

我怎样才能做到这一点?

谢谢.

soc*_*pet 31

要调试perl脚本,请使用-d开关调用调试器.

perl -d test.pl
Run Code Online (Sandbox Code Playgroud)

在调试器中,您可以使用b <line no>在当前文件中设置断点.有时在一个尚未加载或很久以前加载的文件中设置断点是一件麻烦事,所以你也可以放线

$DB::single = 1;
Run Code Online (Sandbox Code Playgroud)

在任何perl程序中的任何地方,调试器在执行该行后会立即中断.这也是在编译时运行的代码中设置断点的好方法(唯一方法?).

  • 值得注意的是,调试器中的'f'命令将切换到查看文件名,如'f /Path/To/Module.pm'; 该文件必须已加载.然后,您可以设置断点,不仅在子例程的入口点,而且在该文件中的任何有效行. (4认同)
  • '$ DB :: single = 1;' 为任何人工作?我猜这不会停止控制 (2认同)

ike*_*ami 12

只需使用sub的完全限定名称作为参数b:

b foo::bar::test::subname
Run Code Online (Sandbox Code Playgroud)

例:

$ perl -d -e'use CGI; CGI->new'
...
main::(-e:1):   use CGI; CGI->new
  DB<1> b CGI::new
  DB<2> r
CGI::new(.../CGI.pm:337):
337:      my($class,@initializer) = @_;
  DB<2> q
Run Code Online (Sandbox Code Playgroud)