Perl脚本如何知道它是否';调试器中正在运行什么?

Perl脚本如何知道它是否';调试器中正在运行什么?,perl,debugging,Perl,Debugging,我有一个脚本,可以正常地将STDIN/STDOUT重定向到一个文件。但是,如果不这样做的话,调试会更加高效。是否有$DB:xxx变量或其他让脚本知道它可以不同行为的东西?通过DB.pm(perldoc-mdb)的perl源代码阅读,我注意到,$SIG{INT}是全局设置的 至少对于一个微不足道的程序来说,这似乎是可行的: if (\&DB::catch && $SIG{'INT'} && $SIG{'INT'} == \&DB::catch) {

我有一个脚本,可以正常地将STDIN/STDOUT重定向到一个文件。但是,如果不这样做的话,调试会更加高效。是否有$DB:xxx变量或其他让脚本知道它可以不同行为的东西?

通过DB.pm(
perldoc-mdb
)的perl源代码阅读,我注意到,
$SIG{INT}
是全局设置的

至少对于一个微不足道的程序来说,这似乎是可行的:

if (\&DB::catch && $SIG{'INT'} && $SIG{'INT'} == \&DB::catch) {
    say "Debugging ?"
}

如果不适用,我想可以将DB.pm子类化,并创建一个简单的调试器,该调试器覆盖
cont
,并执行额外的簿记…

我没有找到任何方法来确定调试器是否直接运行,但您可以使用以下命令检查著名的调试器变量
$DB::single
是否存在:

if ($DB::{single}) {
   say "Debugging";
}
另一种方法是检查是否加载了调试器模块

if ($INC{"perl5db.pl"}) {
   say "Debugging";
}

很多东西设置了
$SIG{INT}
,所以这有点脆弱。回答得好。这两种方法都简单、有效且效果良好。