我有可能在错误类型的对象上调用方法 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(使用前将#替换为@)