3

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

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

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

2 回答 2

6

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

DUMPTRACE_FH=temp.txt perl -d:DumpTrace=quiet myprog.pl 

将类似于您显然正在尝试做的事情。

Devel::DumpTrace还在每一行上做更多的处理——找出变量值并将它们包含在输出中——所以它可能是矫枉过正并且运行速度比perl -dS ...

(Crikey,这是本周的两个插头!Devel::DumpTrace

于 2012-12-06T17:57:01.107 回答
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.
于 2012-12-06T16:39:19.407 回答