假设您使用cpan(或其他外部)模块,例如此处的虚构Stupid::CPAN::Module::OfSatan

package Stupid::CPAN::Module::OfSatan {
  BEGIN { $SIG{__DIE__} = sub { print STDERR "ERROR"; exit; }; }
}
现在,在您的代码后面,您有一些非常纯真的东西,
package main {
  eval { die 42 };
}
这将触发您的 buggy 信号处理程序。您将要知道该错误信号处理程序的定义位置,因此您将执行一些逻辑操作,例如插入 Carp::Always
package main {
  use Carp::Always;
  eval { die 42 };
}
然后Carp::Always将覆盖 buggy 信号处理程序,并且您的代码将神奇地工作。您如何调试引入错误信号处理程序的代码在哪里?

最佳答案

Devel::Confess
mst上的irc.freenode.net/#perl

< mst> EvanCarroll: Devel::Confess honours the old signal handlers
< mst> EvanCarroll: it's basically a better Carp::Always
< EvanCarroll> Cool cool, thanks for that tidbit.

10-06 02:04