Perl ですべての致命的なエラーのスタック バックトレースを強制するにはどうすればよいでしょうか? 質問する

Perl ですべての致命的なエラーのスタック バックトレースを強制するにはどうすればよいでしょうか? 質問する

Perl では、produces のようにすべての致命的なエラーにスタック バックトレースを強制的に表示させる方法はありますかCarp::confess?

use warnings FATAL => 'all';現在の語彙範囲で警告を致命的なものにする方法があることはわかっています。

さらに、これを使用して、すべての警告をどこでも致命的なものにすることができます$SIG{__WARN__} = sub { CORE::die(@_) };(SIGWARN ハンドラーがローカライズされていない場合)。

これをきれいに行う方法はありますか、それとも SIGDIE を微調整する必要がありますか? また、SIGDIE ハンドラーを作成する場合、トレースを取得する最適な方法は何ですか?

理想的なソリューションは、標準のテスト ライブラリTest::Moreやその仲間と連携して動作することでしょう。

アップデート:Mark Johnson は、 を呼び出すために SIGDIE ハンドラを使用することを提案していますCarp::confess。これはうまく機能します。コードは次のとおりです。

use Carp;
$SIG{ __DIE__ } = \&Carp::confess;

ベストアンサー1

Carp::confess を呼び出す SIGDIE ハンドラーをインストールしますか? または、Carp::confess を DIE のハンドラーとして設定しますか?

注意してください標準的な落とし穴evalに関連する。もっと変なやつBEGINブロックに関して。また、perlvar の不吉な警告

見るこの質問スタック トレースの生成の詳細については、こちらをご覧ください。

おすすめ記事