Trong Perl, có cách nào để buộc tất cả các lỗi nghiêm trọng để hiển thị một backtrace ngăn xếp như Carp::confess
sản xuất?Làm thế nào để buộc một backtrace ngăn xếp cho tất cả các lỗi nghiêm trọng trong Perl?
Tôi biết bạn có thể làm use warnings FATAL => 'all';
để cảnh báo gây tử vong trong phạm vi từ vựng hiện tại.
Hơn nữa, bạn có thể sử dụng $SIG{__WARN__} = sub { CORE::die(@_) };
để thực hiện tất cả cảnh báo gây tử vong ở mọi nơi (chưa bản địa hóa trình xử lý SIGWARN).
Có cách nào hay không để thực hiện việc này hoặc tôi có cần tinh chỉnh SIGDIE không? Và nếu tôi viết một trình xử lý SIGDIE, cách tốt nhất để lấy dấu vết là gì?
Giải pháp lý tưởng sẽ hoạt động với thư viện kiểm tra chuẩn, Test::More
và bạn bè.
Cập nhật: Mark Johnson đề xuất sử dụng trình xử lý SIGDIE để gọi Carp::confess
. Nó hoạt động độc đáo. Đây là mã:
use Carp;
$SIG{ __DIE__ } = sub { Carp::confess(@_) };
Câu hỏi tương tự, câu trả lời khác: [Làm thế nào tôi có thể thay thế tất cả 'xác nhận' bằng 'thú nhận' trong ứng dụng Perl?] (Http://stackoverflow.com/q/1877638/269126) – Lumi