如何将Perl调试器输出限制为我自己脚本中的行?

时间:2012-12-06 16:34:49

标签: perl

我在非交互模式下运行调试器,输出写入文件。我想在执行时打印出Perl脚本的每一行,但只打印脚本本身的行。我不想看到脚本调用的库代码(File :: Basename,Exporter :: import等)。这似乎应该很容易做到,但perldebug的文档只讨论限制倾销结构的深度。我想要的是什么,如果是的话,怎么样?

请注意,我正在执行我的程序,如下所示:

PERLDB_OPTS="LineInfo=temp.txt NonStop=1 AutoTrace=1 frame=2" perl -dS myprog.pl arg0 arg1

2 个答案:

答案 0 :(得分:6)

默认情况下,Devel::DumpTrace不会进入系统模块,您可以对调试器将进入的模块进行精细控制(这并不容易,但可能)。像

这样的东西
DUMPTRACE_FH=temp.txt perl -d:DumpTrace=quiet myprog.pl 

类似于你显然想做的事情。

Devel::DumpTrace在每一行上也做了很多处理 - 计算变量值并将它们包含在输出中 - 因此它可能过度杀戮并且运行速度比perl -dS ...慢很多

(Crikey,本周Devel::DumpTrace {{1}}现在已经two plugs了!)

答案 1 :(得分:1)

您是否在谈论不想跨越您自己的计划之外的功能?为此,您希望使用n代替s

来自perldebug

   s [expr]    Single step.  Executes until the beginning of another
               statement, descending into subroutine calls.  If an
               expression is supplied that includes function calls, it too
               will be single‐stepped.

   n [expr]    Next.  Executes over subroutine calls, until the beginning
               of the next statement.  If an expression is supplied that
               includes function calls, those functions will be executed
               with stops before each statement.