В Perl, есть ли способ заставить все фатальные ошибки отображать обратную трассировку стека, как Carp::confess
производит?
Я знаю, что вы можете сделать use warnings FATAL => 'all';
, чтобы сделать фатальные предупреждения в текущей лексической области.
Кроме того, можно использовать $SIG{__WARN__} = sub { CORE::die(@_) };
, чтобы сделать все предупреждения фатальными везде (без локализации обработчика SIGWARN).
Есть ли чистый способ сделать это, или мне нужно настроить SIGDIE? И если я напишу обработчик SIGDIE, каков наилучший способ получить трассировку?
Идеальное решение будет работать со стандартными библиотеками тестирования, Test::More
и друзьями.
Обновление: Марк Джонсон предлагает использовать обработчик SIGDIE для вызова Carp::confess
. Это работает хорошо. Вот код:
use Carp;
$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };