首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Carp详细地不生成堆栈跟踪?

为什么Carp详细地不生成堆栈跟踪?
EN

Stack Overflow用户
提问于 2014-06-06 08:42:33
回答 3查看 414关注 0票数 0

为什么use Carp qw(verbose);不让die生成堆栈跟踪?我的意思是

错误出现在./test.pl第8行。

是打印出来的,但我也想要一个堆栈跟踪。

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;

use Carp qw(verbose);

sub c { die "ERROR"; }

sub b {
  c;
}

sub a {
  b;
}

a;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-06 14:21:19

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

作为调试辅助工具,您可以强制Carp将croak视为confess,将carp视为跨越所有模块的cluck

您不使用croakcarp,因此use Carp qw( verbose );是无用的。

您可以通过重写die或创建$SIG{__DIE__}处理程序来实现您想要的结果。鲤鱼:永远是为您预先制定的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2014-06-06 08:50:15

尝试使用发展:供认。用法:

代码语言:javascript
复制
perl -d:Confess myscript.pl

它使die打印一个堆栈跟踪。

票数 5
EN

Stack Overflow用户

发布于 2014-06-06 08:45:25

那么你想要confess

代码语言:javascript
复制
use strict;
use warnings;

use Carp qw(confess);

sub c { confess "ERROR"; }
sub b { c; }
sub a { b; }
a();

产出:

代码语言:javascript
复制
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__}

代码语言:javascript
复制
use Carp qw(confess);

$SIG{__DIE__} = \&confess;

sub c { die "ERROR"; }
sub b { c; }
sub a { b; }
a();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24077620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档