【发布时间】:2017-03-02 09:43:52
【问题描述】:
在我的 perl 脚本(实际上作为守护进程运行)中,我不小心尝试访问一个之前未定义的数组元素(也是一个数组)。我的脚本此时正在退出,但没有转储任何核心。在这种情况下是否可以转储核心?我尝试通过 kill -6 命令杀死我的 perl 进程,在这种情况下会生成核心但是当我们从脚本中意外退出时,我想在每个实例中生成核心。
my @array = ();
my @a;
@a = @{$array[1]};
【问题讨论】:
-
访问未定义的数组元素不会在 Perl 中退出:
perl -e 'print $arr[20]; print "still here"' -
对我来说仍然没有错误。
-
“dump core”通常不是调试 perl 脚本的步骤之一。
-
总能得到一些东西的一种方法是将它放在
END块中。它在每个die或exit运行。但可能不够具体。另一种方法是在编写代码时“防止”错误——使用仔细的错误检查。然后,您可以获得非常具体的信息。或者,覆盖die,但为$SIG{__DIE__}“信号”提供一个挂钩(子程序)。例如,请参阅 this answer 以获取在十几行代码中触发任何die的调试器。