如何在Perl中强制所有致命错误生成堆栈回溯?

25
在Perl中,是否有一种方法可以强制所有致命错误显示堆栈回溯,就像Carp::confess产生的那样? 我知道你可以使用use warnings FATAL => 'all';使当前词法范围内的警告变为致命错误。 此外,还可以使用$SIG{__WARN__} = sub { CORE::die(@_) };使所有警告在任何地方都变为致命错误(未将SIGWARN处理程序本地化的情况除外)。 有没有一种干净的方法来做到这一点,或者我需要调整SIGDIE?如果我确实编写了一个SIGDIE处理程序,最好的获取跟踪的方法是什么? 一个理想的解决方案将与标准测试库Test::More和朋友一起使用。 更新:Mark Johnson建议使用SIGDIE处理程序调用Carp::confess。它非常有效。这里是代码:
use Carp;
$SIG{ __DIE__ } = \&Carp::confess;

同一个问题,更多的答案:如何在Perl应用程序中将所有的'die'替换为'confess'? - Lumi
2个回答

17

12

请参考模块 "Carp::Always",该模块可将您代码中的所有死亡和警告转换为堆栈跟踪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接