当“无法通过包 y 定位对象方法 x”时打印堆栈跟踪 (Perl)

2024-02-02

我有可能在错误类型的对象上调用方法 x,但它位于我的调用堆栈中,因此并不明显。

那么:有没有办法在发生此错误时始终打印完整的堆栈跟踪?


要始终打印完整的堆栈跟踪,请添加use Carp::Always;或运行程序

perl -MCarp::Always script

或者,使用 bash

PERL5OPT=-MCarp::Always script

是什么设置了PERL5OPT环境变量 https://perldoc.perl.org/perlrun.html#ENVIRONMENT并运行(可执行文件)script。其一,这允许 shebang (#!)行中script来决定使用哪个解释器。如果你export它(比如在 shell 配置文件中),export PERL5OPT=-MCarp::Always,那么它将被该 shell 中的所有 Perl 脚本使用。谢谢ikegami https://stackoverflow.com/users/589924/ikegami征求意见。

要微调哪些特定异常得到更多关注,请添加$SIG{__DIE__} hook

use Carp;

BEGIN { 
    $SIG{__DIE__} = sub { 
        confess @_ if $_[0] =~ /Can't locate object method/;  #'
    };  
};

并在钩子返回后“...异常处理将像没有钩子时一样继续,除非...", see perlvar 中的 %SIG http://perldoc.perl.org/perlvar.html#%SIG。上面的代码die通常发生其他错误。

因此,在这里您可以更改发生的情况die被抛出,代码在它抛出之前运行。例如,参见这个帖子 https://stackoverflow.com/a/42183690/4653379了解如何获取调用堆栈中每个帧的所有词汇。

搞乱这个可能会很棘手,所以请仔细阅读。请参阅以下链接这个帖子 https://stackoverflow.com/a/45520365/4653379, 例如。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当“无法通过包 y 定位对象方法 x”时打印堆栈跟踪 (Perl) 的相关文章

随机推荐