3

我是新手Perl,我有以下问题。
我有一个日志输出,我找到了这个日志输出的来源。我的意思是打印它的某个模块中的子程序。

现在例如Java通过Eclipse我将使用例如Call hierarchy和其他实用程序来查看如何/何时/谁调用该方法并弄清楚如何重现我需要和调试的内容。

我怎样才能做到这一点Perl?通过例如grep?如果我grep例如对于模块名称,我会得到数百行use A require A C::B::A B::A C::B::A::some_routine C::B::A::some_other_routine等。
除此之外,我担心也许我感兴趣的例程没有被直接调用,而是一些脚本,例如通过一些运行我感兴趣的模块晦涩难懂(对我来说,由于我的无知Perl)方式。

那么我将如何Perl以最有效的方式调试某些东西呢?你Perl的专家建议我做什么并变得更有效率?

4

3 回答 3

5

在 Perl 调试器下运行程序:

perl -d scriptname arguments...

在您关心的函数中设置断点,当程序在断点处停止时,使用T调试器命令显示堆栈跟踪,这将显示函数从何处调用。

根据您的评论,我不确定这是否真的解决了您正在寻找的内容。也许您想要的是 Perl 应用程序的交叉引用?请参阅常见问题解答如何交叉引用我的 Perl 程序?

于 2013-05-25T19:06:28.953 回答
4

要在不修改任何代码的情况下获取调用堆栈的转储,可以使用 perl 命令行在Carp::Always下运行程序:

perl -MCarp::Always my_program.pl
于 2013-05-26T13:07:20.050 回答
4

大多数情况下,获取堆栈跟踪(以及一些调试信息)是一个好的开始。可以使用标准Carp模块生成堆栈跟踪:

use Carp;  
print_to_log(Carp::longmess("We're here"));

或者也有一个面向对象的模块

于 2013-05-25T20:15:33.590 回答