perl - 如果每个人都使用的调试代码的机制覆盖它,你如何捕获一个有问题的 sig die 处理程序?

标签 perl signals eval die carp

假设您使用了一个 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
来自 mstirc.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.

关于perl - 如果每个人都使用的调试代码的机制覆盖它,你如何捕获一个有问题的 sig die 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65834921/

相关文章:

r - dplyr 或向量化方法中的动态变量评估

linux - 设置二进制传输模式

regex - 使用 Perl 多次匹配正则表达式

arrays - Perl-我在寻找什么功能?将多个规则分配给指定结果

perl - 旧 TPJ 文章中的 8 queen 问题缺少到主模块 Queen 的链接

c - 具有静态变量的信号处理程序中的竞争条件

c++ - 如何管理 SFML 渲染, "signals"方式?

bash - 如何使用信号从自身重新启动 BASH 脚本?

ios - Swift 中是 ScriptEngine 或类似 eval() 的函数吗?

php - 绕过 eval() T_USE 解析错误