如果每个人都使用的调试代码的机制覆盖了它,您如何捕获有缺陷的 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

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.

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...