В 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( @_ ) };