为什么Carp不会冗长地产生堆栈跟踪?

问题描述 投票:0回答:3

为什么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;
perl exception stack-trace die
3个回答
3
投票

use Carp qw( verbose );中,文档说:

作为调试工具,您可以强制Carp在所有模块中将croak视为confess,将carp视为cluck

您不使用croakcarp,所以use Carp qw( verbose );没有用。

您可以通过重写die或通过创建$SIG{__DIE__}处理程序来实现所需的功能。 Carp::Always是为您完成的预制解决方案。


4
投票

尝试使用Devel::Confess。用法:

perl -d:Confess myscript.pl

它使die打印堆栈轨道。


3
投票

然后您想要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__}
© www.soinside.com 2019 - 2024. All rights reserved.