为什么use Carp qw(verbose);
不使die
产生堆栈跟踪?我的意思是只是
./ test.pl第8行出现错误。
已打印,但我还希望有堆栈跟踪。
#!/usr/bin/perl
use strict;
use warnings;
use Carp qw(verbose);
sub c { die "ERROR"; }
sub b {
c;
}
sub a {
b;
}
a;
use Carp qw( verbose );
中,文档说:
作为调试工具,您可以强制Carp在所有模块中将
croak
视为confess
,将carp
视为cluck
。
您不使用croak
或carp
,所以use Carp qw( verbose );
没有用。
您可以通过重写die
或通过创建$SIG{__DIE__}
处理程序来实现所需的功能。 Carp::Always是为您完成的预制解决方案。
然后您想要confess
confess
输出:
use strict;
use warnings;
use Carp qw(confess);
sub c { confess "ERROR"; }
sub b { c; }
sub a { b; }
a();
如果您不能更改其他代码,则可以使用ERROR at confess.pl line 6.
main::c() called at confess.pl line 7
main::b() called at confess.pl line 8
main::a() called at confess.pl line 9
$SIG{__DIE__}