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

前端之家收集整理的这篇文章主要介绍了如何强制堆栈回溯Perl中的所有致命错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Perl中,有没有办法强制所有致命的错误显示像Carp :: confess产生的堆栈回溯?

我知道你可以使用警告FATAL => ‘所有’;对目前的词汇范围发出致命的警告。

此外,可以使用$ SIG {__ WARN__} = sub {CORE :: die(@_)};使所有警告都到处死亡(尚未本地化SIGWARN处理程序)。

有没有干净的方法来做到这一点,还是需要调整SIGDIE?如果我写了一个SIGDIE处理程序,什么是获取跟踪的最佳方式?

一个理想的解决方案可以与标准测试库Test :: More和朋友一起工作。

更新:Mark Johnson建议使用SIGDIE处理程序来调用Carp :: confess。它的效果很好这里是代码

use Carp;
$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };

解决方法

安装一个调用Carp :: confess的SIGDIE处理程序?或者只是设置Carp :: confess作为DIE的处理程序?

小心standard gotchas与eval有关。关于BEGIN块,甚至有weirder gotcha。另请注意ominous warning in perlvar

有关生成堆栈跟踪的更多信息,请参见this question

原文链接:https://www.f2er.com/Perl/173196.html

猜你在找的Perl相关文章