给定一个函数名称,我想将调用层次结构“一直报告到顶部”。
例如,
# ./find.pl functionName
functionName
caller
caller2
...
callerN
在上面的输出中,我了解到callerN是'顶级'函数,最终调用'最低级'functionName函数。
我一直在努力实现这一目标,但实施总是存在缺陷。这对我来说不够可靠,对它有信心。
有什么东西可以做到吗?
谢谢
答案 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