如何解决如果每个人都使用的调试代码的机制覆盖了它,您如何捕获有缺陷的 sig die 处理程序?
假设您使用 cpan(或其他外部)模块,就像我们在此处虚构的模块一样Stupid::CPAN::Module::OfSatan
package Stupid::CPAN::Module::OfSatan {
BEGIN { $SIG{__DIE__} = sub { print STDERR "ERROR"; exit; }; }
}
现在在你的代码中你有一些非常无辜的东西,
package main {
eval { die 42 };
}
这将触发您的错误信号处理程序。您将想知道错误信号处理程序的定义位置,因此您将执行一些逻辑操作,例如插入 Carp::Always
,
package main {
use Carp::Always;
eval { die 42 };
}
Carp::Always
然后将覆盖有问题的信号处理程序,您的代码将神奇地工作。您如何调试引入错误信号处理程序的代码?
解决方法
Devel::Confess
从 mst
的 irc.freenode.net/#perl
,
< mst> EvanCarroll: Devel::Confess honours the old signal handlers
< mst> EvanCarroll: it's basically a better Carp::Always
< EvanCarroll> Cool cool,thanks for that tidbit.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。