【发布时间】:2023-04-09 17:21:01
【问题描述】:
我正在翻阅 7900 多行 perl 代码。我需要改变一些东西,而且事情进展得很好,即使我只用了 36 个小时进入 perl。我学习了该语言的基本结构,并且能够完成一些小事。但是突然间我发现了一个在任何地方都没有任何定义的函数调用。我多次检查所有“子”。我找不到函数定义。我错过了什么?这个函数的定义在哪里。我很确定这是一个用户定义的函数,而不是一个库函数(从它的名字我猜到了这个)。 请帮我找到这个函数的定义。
这里有几行来自函数用法。
(cfg_machine_isActive($ep)) {
staf_var_set($ep, VAR_PHASE, PHASE_PREP);
staf_var_set($ep, VAR_PREP, STATE_RUNNING);
} else {
cfg_machine_set_state($ep, STATE_FAILED);
}
}
$rc = rvt_deploy_library(); #this is the function that is the problem
dump_states() unless ($rc != 0);
答案如下:
(由于我没有足够的声誉,我无法发布这个答案本身)
我发现在 perl 中查找导入函数定义的最快方法是以下命令:
>perl.exe -d <filename>.pl
这将启动调试器。 然后;做
b <name of the function/subroutine who's definition you are looking for>
在我们的例子中,这意味着输入:
b rvt_deploy_library
接下来按“c”跳转到提到的函数/子程序。
这会将调试器带到所需的功能。现在,您可以看到行号。以及控制台上函数/子例程的位置。
main::rvt_deploy_library(D:/CAT/rvt/lib/rvt.pm:60):
【问题讨论】:
-
请添加更多上下文,比如一个 grep,在神秘的函数用法周围有 10 行上下文。
-
@RC 我已经按照你的建议更新了问题
-
我会 grep 函数名的代码库。
-
我知道先生,但那没用!我找不到它!事实上,我什至分别查找了所有出现的“rvt”、“部署”和“库”……仍然没有。现在我相当确信该函数没有在那里定义..我正在寻找程序员可以做到这一点的方法..我的意思是她如何才能“隐藏”定义..
标签: perl