繁体   English   中英

如何在bash包装器中调试Perl

[英]How to debug perl within a bash wrapper

我正在调试由bash脚本启动的Perl程序。 由于Perl脚本包含大量的Perl模块,并且需要提供极其复杂的选项,因此这里的bash包装器绝对是必需的。

由于这种限制,我无法使用Perl调试器,这是我猜到的最简单的方法。 然后我转向旧的好的printf 但是,即使我将printf s从一个添加到不同模块中的另一个位置,实际上也不会打印任何内容到启动bash包装器的终端。

因此,我希望您首先解释为什么我无法从内部Perl脚本中获取任何打印信息,以及在这种情况下如何解决我的问题以调试Perl程序。

解释为什么我无法从内部Perl脚本中获取任何打印信息

大概您的bash脚本吞没了输出。

找出bash的功能,然后使用相同的参数和环境变量直接调用perl。

快速重击哈克

应该可以将STDOUTSTDERR重定向到文件:

# Inside the bash script
perl myScript.pl 1>perl_log.out 2>perl_log.err

快速Perl Hack

滚动一个子项以打印调试输出:

use constant debug_flag => 1; # At top of script(s)

{  my $debug_handle;

    sub debug {

        return unless debug_active;  # Only prints debug msgs if debug active

        unless ( $debug_handle ) {   # Initialize debug log

            open $debug_handle, '>', 'perl_log.out' or die $!;
        }

        print $debug_handle @_, "\n";
    }
}

# call with 'debug'

debug ( 'Array length : ', scalar @array );

Perl最佳做法

use Log::Log4perl;  # Wonderful logging module

use Carp;
local $SIG{__DIE__} = \&Carp::confess;  # Print out stack traces...
local $SIG{__WARN__} = \&Carp::cluck;   # ... when using die and warn

疑虑

最好尽可能避免使用printf而改用print

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM