perl - 当 "Can' t 通过包 y 定位对象方法 x 时打印堆栈跟踪"(Perl)

标签 perl debugging

我有可能在错误类型的对象上调用方法 x,但它在我的调用堆栈中很靠下,所以并不明显。

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

最佳答案

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

perl -MCarp::Always script

或者,使用 bash

PERL5OPT=-MCarp::Always script

什么设置了 PERL5OPT environment variable并运行(可执行)脚本。其一,这允许 script 中的 shebang (#!) 行决定使用哪个解释器。如果您导出它(比如在 shell 配置文件中),导出 PERL5OPT=-MCarp::Always,那么它将被该 shell 中的所有 Perl 脚本使用。感谢ikegami征求意见。

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

use Carp;

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

并且在钩子(Hook)返回“...异常处理继续,就像没有钩子(Hook)时一样,除非...”,请参阅 %SIG in perlvar 。上面的代码通常会因其他错误而死亡

因此,您可以在这里更改骰子抛出时发生的情况,并在骰子抛出之前运行代码。例如,参见this post了解如何获取调用堆栈中每个帧的所有词汇。

搞乱这个可能会很棘手,所以请仔细阅读。请参阅 this post 中的链接,例如。

关于perl - 当 "Can' t 通过包 y 定位对象方法 x 时打印堆栈跟踪"(Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45991133/

相关文章:

.net - 如何下载正确版本的 mscordacwks 和 mscorwks?

javascript - 此处文档中的 JQuery 不起作用

perl - Moose:覆盖派生类中的 `required` 属性

调用带参数的 perl 例程

excel - 如何在 VBA/VB.NET 中逃脱无限循环

Eclipse SWT 浏览器和 Firebug lite?

debugging - PhoneGap Windows Phone,适用于 Android 和 ios,但不适用于 Windows?

perl - 如何使用 Perl 提供图像并具有一定的安全性和最少的资源?

php - perl Spreadsheet::WriteExcel 是否比 PHPExcel 更快且占用内存更少?

windows - 为什么 gtk+ 在 eclipse 上调试时显示 "invalid utf-8"?