使用标志进行 Perl 调试

标签 perl debugging script-debugging

所以我的目标是找到一种使用标志在 Perl 中打开打印语句的简单方法。在 C/C++ 中,您可以使用 #define 来选择是否运行某些代码,这是一种打开和关闭调试打印语句的方法。如果定义了#define DEBUG,那么你会打印一些东西,否则你会在没有打印语句的情况下运行它。我想知道在 Perl 中是否有一种简单的方法可以做到这一点。

这是它如何工作的一个例子:

for($i = 0 ; $i < 10; $i++){
    if(debug flag){
         print some info;
    }
    do operational stuff.
}

现在您可以从命令行执行以下两项操作之一:

1.在没有调试打印语句的情况下运行

perlScript.pl 

2.使用调试打印语句运行

perlScript.pl -debug

或者如果有人有更好的主意请告诉我!

最佳答案

在 perl 中,编译时也是运行时。所以使用 #define 类型语句确实没有太多优势。

我常用的技巧是:

my $debug = 0; 
$debug += scalar grep ( "-d", @ARGV ); 

(不过老实说,GetOpt 可能是一个更好的计划)

然后使用:

print if $debug;
print $statement if $debug > 2;

这意味着我有一种简单的方法来设置冗长程度,还允许我通过增加语句来选择它。

有时我会嵌入一个信号处理程序来调整调试级别 -

#!/usr/bin/perl

use strict;
use warnings;

my $debug = 0; 
$debug += scalar grep ( "-d", @ARGV ); 

$SIG{'USR1'} = { $debug++ };
$SIG{'USR2'} = { $debug-- };

while ( 1 ) {
    print "Debugging at: $debug\n";
    sleep 1;
}

更多的是关于我在写什么样的代码的问题——我在做 forky 的时候特别喜欢后者,因为这样我就可以独立地动态调整每个 fork 中的调试级别.

关于使用标志进行 Perl 调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008050/

相关文章:

file - 替换单词后如何覆盖文件?

perl - 使用 Furl 时的基本 URI

javascript - 获得比 "[object Object]"更有用的值来进行调试?

debugging - 是否有适用于 IE6 的类似 Firebug 的工具?

javascript - Firebug - 断点不命中

jquery - Firebug 1.6 不显示 JS 错误

Powershell "Set-PSDebug -Trace 2"导致意外结果

regex - 用于在字符串的第一个位置匹配 char '*' 的 Perl RegEx

Perl 打包/解包和二进制字符串的长度

c - gcc调试,段错误(核心转储)但没有核心