加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:21:44 所属栏目:大数据 来源:网络整理
导读:在Perl中,有没有办法强制所有致命的错误显示像Carp :: confess产生的堆栈回溯? 我知道你可以使用警告FATAL = ‘所有’;对目前的词汇范围发出致命的警告。 此外,可以使用$ SIG {__ WARN__} = sub {CORE :: die(@_)};使所有警告都到处死亡(尚未本地化SIGWAR
在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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读