예외를 포착하고 메시지를 기록한 다음 Carp::longmess
을 호출하여 스택 추적을 가져 오는 코드가 있습니다.perl 잉어 모듈의 무한 루프
그래서 우리가하고있는 일의 단순화 된보기입니다
sub logwrite($)
{
my $msg = $_[0];
my($pkg,$fil,$lin)=caller;
my $timestamp = POSIX::strftime(...);
print STDERR "$timestamp $fil/$lin $msg\n";
print STDERR "$timestamp $fil/$lin Stack trace:\n" . Carp::longmess . "\n";
}
그러나 로그에 내가보고 있어요 :
eval { <some SOAP::Lite stuff> };
if(my $err = [email protected])
{
logwrite("Caught Error: $err");
}
logwrite 기능은 본질적으로
20111030 Module.pm/42 Caught Error: at line
Use of uninitialized value in caller at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 22.
Use of uninitialized value in string eq at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 91.
Use of uninitialized value in numeric lt (<) at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 200.
Use of uninitialized value in pattern match (m//) at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 55.
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 55.
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 142.
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 142.
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 142.
Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/5.8.8/Carp/Heavy.pm line 142.
...
그리고 Carp/Heavy.pm
모듈의 경고 시퀀스가 반복적으로 반복됩니다. b logifle을 낮추십시오. 그래서 우리는 결국 그것을 죽입니다. 이 경고는 Carp::longmess
에 대한 호출에 의해 트리거되는 것처럼 보입니다. 여기에있는 또 다른 단점은 [email protected]
변수가 at
인 것처럼 보입니다. 그것은 at
으로 추가되었지만 실제 오류 메시지 또는 회선 번호는 없습니다.
누구나 Carp
패키지로 무엇을 연결했는지 알 수 있습니까? 드물기는하지만 지난 한 달 간 몇 차례에 걸쳐 성과를 거두었으며 매일 수백 개의 일자리가 운영됩니다.
호출 스택이 어떻게 보이는지 모르는 상태에서 오류를 재현하는 방법을 모르겠습니다. 잉어는 확실히 스택 맨 위로 걸어갔습니다. Carp의 버그이거나 손상된 스택 일 수 있습니다. 잉어는 CPAN 모듈로 사용할 수 있습니까? 업그레이드를 시도합니까? https://metacpan.org/release/Carp 다른 옵션은 Perl 5.8.9를 시도하는 것입니다. – Schwern
POSIX가 잉어를 호출 할 수 있습니까? 그리고 longmess에 중단 점을 설정 한 다음 단계별로 문제를 디버깅 했습니까? – DVK
실제로'$ @'는'at '를 포함하지 않습니다. 빈 문자열이 있거나 undef 일 수 있습니다. 특이한 것은 아닙니다. 잉어가 파일 이름이나 줄 번호를 가져올 수 없기 때문에 훨씬 더 많이 사용됩니다. – ikegami