报告在Perl中调用给定函数的所有函数层次结构

时间:2012-12-18 01:45:49

标签: perl

给定一个函数名称,我想将调用层次结构“一直报告到顶部”。

例如,

# ./find.pl functionName
functionName
caller
    caller2
    ...
        callerN

在上面的输出中,我了解到callerN是'顶级'函数,最终调用'最低级'functionName函数。

我一直在努力实现这一目标,但实施总是存在缺陷。这对我来说不够可靠,对它有信心。

有什么东西可以做到吗?

谢谢

2 个答案:

答案 0 :(得分:1)

如果实际运行代码是可行的,则可以使用caller()函数或封装版本Devel::Stacktrace

如果您依赖代码分析...... Lscharf's combination of PPI and GraphViz可能会有用。不知道它是否是最新的,或者它是否捕获了无数边缘情况,如上面的ikegami所提到的。

答案 1 :(得分:1)

您可以use Carp及其cluck函数打印调用堆栈。有关详细信息,请参阅documentation

use strict;
use warnings;

use Carp qw(cluck);

⫕

sub callstack {
    cluck "waaah";
}

sub subsub {
    &callstack;
}

输出:

$ perl /tmp/test.pl
waaah at /tmp/test.pl line 10
    main::callstack called at /tmp/test.pl line 14
    main::subsub called at /tmp/test.pl line 7