Perl 脚本如何知道它是否在调试器中运行?

Vic*_*c K 5 debugging perl

我有一个脚本可以正常将 STDIN/STDOUT 重定向到文件。但是,如果不这样做,调试的效率会高得多。是否有 $DB:xxx 变量或让脚本知道的东西,以便它可以表现不同?

ike*_*ami 4

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

if ( $DB::{ single } ) {
   say "Debugger is running";
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是检查调试器模块是否已加载。

if ( $INC{ "perl5db.pl" } ) {
   say "Debugger is running";
}
Run Code Online (Sandbox Code Playgroud)

最后,调试器要求 Perl 运行在调试支持模式下,并$^P指示 Perl 是否处于该模式。

if ( $^P ) {
   say "Perl is in debug support mode";
}
Run Code Online (Sandbox Code Playgroud)

调试器并不是唯一需要将 Perl 置于调试支持模式的工具。其他包括 Devel::NYTProf、Devel::Cover、Devel::Trace 等等。因此这种方法不能用于专门检查调试器是否正在运行。但这可能是您真正想要的。