gpt4 book ai didi

perl - 如何仅从 Perl 程序的主包获取跟踪输出

转载 作者:行者123 更新时间:2023-12-02 10:53:10 25 4
gpt4 key购买 nike

我想跟踪我的 Perl 脚本,但仅限 main 包中的代码,并将输出重定向到文件。

使用 perl -d script.pl 启动脚本时,它会进入交互模式。

我已经尝试过

perl -d:Trace perl_05.pl 2&> output.log

但这也跟踪了我不想要的所有子例程和模块。

我正在寻找诸如 bash set -o xtracesh -x 之类的东西。

最佳答案

文章Trace your Perl programs解决您对跟踪量的担忧,并向您展示一种调整输出的方法,以便您只跟踪您想要的内容。

You can create your own throw-away module to trace exactly what you want. Since the current directory is usually already in @INC, you can create a Devel/MyTrace.pm.

完整阅读本文,了解作者如何修改跟踪函数的默认行为,首先将跟踪输出到文件,然后也输出到 STDERR,最后将输出限制为仅跟踪主文件。

You can go one step further to exclude all code except for the primary file:

use v5.10;
use autodie;

BEGIN {

my $trace_file = $ENV{TRACE_FILE} // "mytrace.$$";
print STDERR "Saving trace to $trace_file\n";

my $fh = do {
if( $trace_file eq '-' ) { \*STDOUT }
elsif( $trace_file eq 'STDERR' ) { \*STDERR }
else {
open my $fh, '>>', $trace_file;
$fh;
}
};

sub DB::DB {
my( $package, $file, $line ) = caller;
return unless $file eq $0;
my $code = \@{"::_<$file"};
print $fh "[@{[time]}] $file $l $code->[$line]";
}
}

1;

最后一段代码是您特别感兴趣的。它完全符合您的要求。

关于perl - 如何仅从 Perl 程序的主包获取跟踪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com