2009-04-10 2 views
23

Perl에서 Carp::confess 같이 스택 백 트레이스를 표시하도록 치명적인 오류를 강제로 생성하는 방법이 있습니까?Perl의 모든 치명적인 오류에 대해 스택 백 추적을 강제로 수행하려면 어떻게해야합니까?

use warnings FATAL => 'all';을 사용하면 현재 어휘 범위에서 경고가 치명적일 수 있습니다.

$SIG{__WARN__} = sub { CORE::die(@_) };을 사용하면 SIGWARN 처리기를 현지화하지 않은 모든 곳에서 모든 경고를 치명적으로 만들 수 있습니다.

깨끗한 방법이 있습니까, 아니면 SIGDIE를 조정해야합니까? 그리고 만약 SIGDIE 핸들러를 작성한다면, 트레이스를 얻는 가장 좋은 방법은 무엇입니까?

이상적인 솔루션은 표준 테스트 라이브러리 Test::More 및 친구들과 함께 작동합니다.

업데이트 : Mark Johnson은 SIGDIE 처리기를 사용하여 Carp::confess을 호출 할 것을 제안합니다. 그것은 잘 작동합니다. 코드는 다음과 같습니다.

+0

동일한 질문, 답변 : [Perl 응용 프로그램에서 모든 'die'를 '고백'으로 바꾸려면 어떻게해야합니까?] (http://stackoverflow.com/q/1877638/269126) – Lumi

답변

16

Carp :: confess를 호출하는 SIGDIE 처리기를 설치 하시겠습니까? 또는 DIE 처리기로 Carp :: confess를 설정하십시오.

eval과 관련된 standard gotchas에주의하십시오. BEGIN 블록과 관련하여 심지어 weirder gotcha이 있습니다. ominous warning in perlvar에 유의하십시오.

스택 추적을 생성하는 방법에 대한 자세한 내용은 this question을 참조하십시오.

+0

왜 나는 그것을 생각하지 않았다. 그것은 작동합니다. – daotoad

11

"Carp::Always"모듈도 참조하십시오.이 모듈은 모든 죽을 수 있으며 코드에서 스택 트레이스로 경고합니다.

관련 문제