6

假设您使用一个 cpan (或其他外部)模块,就像我们这里的虚构模块一样Stupid::CPAN::Module::OfSatan

package Stupid::CPAN::Module::OfSatan {
  BEGIN { $SIG{__DIE__} = sub { print STDERR "ERROR"; exit; }; }
}

现在稍后在你的代码中你有一些非常无辜的东西,

package main {
  eval { die 42 };
}

这将触发您的错误信号处理程序。你会想知道那个有问题的信号处理程序是在哪里定义的,所以你会做一些合乎逻辑的事情,比如 insert a Carp::Always

package main {
  use Carp::Always;
  eval { die 42 };
}

Carp::Always然后将覆盖错误的信号处理程序,您的代码将神奇地工作。如何调试引入错误信号处理程序的代码?

4

1 回答 1

4

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.
于 2021-01-21T20:20:21.277 回答