Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
934 views
in Technique[技术] by (71.8m points)

perl - How do you catch a buggy sig die handler if the mechanism to debug code that everyone uses overrides it?

Let's say you use a cpan (or otherwise external) module, like our fictional one here Stupid::CPAN::Module::OfSatan

package Stupid::CPAN::Module::OfSatan {
  BEGIN { $SIG{__DIE__} = sub { print STDERR "ERROR"; exit; }; }
}

Now later in your code you have something very innocent,

package main {
  eval { die 42 };
}

This is going to trigger your buggy signal handler. You're going to want to know where that buggy signal handler is defined, so you'll do something logical like insert a Carp::Always,

package main {
  use Carp::Always;
  eval { die 42 };
}

Carp::Always will then override the buggy signal handler, and your code will magically work. How can you debug where the code is that introduces a buggy signal handler?

question from:https://stackoverflow.com/questions/65834921/how-do-you-catch-a-buggy-sig-die-handler-if-the-mechanism-to-debug-code-that-eve

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Devel::Confess

From mst on 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.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...