代码之家  ›  专栏  ›  技术社区  ›  daotoad

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

  •  24
  • daotoad  · 技术社区  · 17 年前

    在Perl中,有没有一种方法可以强制所有致命的错误显示类似于 Carp::confess 生产?

    我知道你能做到 use warnings FATAL => 'all'; 使警告在当前词汇范围内致命。

    此外,还可以使用 $SIG{__WARN__} = sub { CORE::die(@_) }; 使所有警告在任何地方都是致命的(这并没有本地化sigwarn处理程序)。

    有没有一个干净的方法来做这个,还是我需要调整西格迪?如果我编写了一个sigdie处理程序,那么获取跟踪的最佳方法是什么?

    理想的解决方案可以与标准测试库一起使用, Test::More 和朋友们。

    更新: Mark Johnson建议使用sigdie处理程序调用 鲤鱼:忏悔 . 它工作得很好。代码如下:

    use Carp;
    $SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
    
    2 回复  |  直到 16 年前
        1
  •  16
  •   Community Mohan Dere    9 年前

    安装一个称为carp::concrate的sigdie处理程序?或者干脆把鲤鱼设为死亡处理者?

    当心 standard gotchas 与评估有关。有一个偶数 weirder gotcha 关于开始块。还注意到 ominous warning in perlvar .

    this question 有关生成堆栈跟踪的详细信息。

        2
  •  11
  •   kukudas    17 年前

    另见模块” Carp::Always “,它将代码中的所有死区和警告都转换为stacktrace。