为什么use Carp qw(verbose);
无法以我想要的方式运作?我的意思是只打印ERROR at ./test.pl line 8.
我想要一个堆栈跟踪。请帮助制作die
跟踪堆栈。
#!/usr/bin/perl
use strict;
use warnings;
use Carp qw(verbose);
sub c { die "ERROR"; }
sub b {
c;
}
sub a {
b;
}
a;
答案 0 :(得分:3)
然后你想要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__}
use Carp qw(confess);
$SIG{__DIE__} = \&confess;
sub c { die "ERROR"; }
sub b { c; }
sub a { b; }
a();
答案 1 :(得分:3)
答案 2 :(得分:3)
use Carp qw( verbose );
,文档说:
作为调试辅助工具,您可以强制Carp在所有模块中将
croak
视为confess
,将carp
视为cluck
。
您不使用croak
或carp
,因此use Carp qw( verbose );
无用。
您可以通过覆盖die
或创建$SIG{__DIE__}
处理程序来实现您的目标。 Carp::Always是预先制定的解决方案,可以为您完成此任务。