如何打印所有已执行的子例程? [英] How can I print all executed subroutines?

查看:0
本文介绍了如何打印所有已执行的子例程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,我有以下Perl脚本

{ 
    package A;

    {
        package B;

        sub _y {
            print "Just Another Perl Hacker
";

        }

    }

    sub _x {
        print "Hello world!
";
        B::_y();
    }
}


use strict;
use warnings;

_x();

如何将每个带有包限定符的已执行SUB打印到STDERR或任何日志文件?

例如,在上面的脚本中,我预计会看到以下输出:

1 A::_x()
2 B::_y()

我认为可以使用像devel::NYTProf这样的调试器,但我还没有找到用于该简单任务的特定调试器模块或它们的参数。

有什么想法吗?

推荐答案

可以使用标准perl调试器:

$ PERLDB_OPTS="NonStop frame=1" perl -d prog.pl
  entering CODE(0x260cd78)
   entering strict::import
  entering CODE(0x260cd18)
   entering warnings::import
Package try.pl.
  entering DB::Obj::_init
  entering A::_x
Hello world!
   entering B::_y
Just Another Perl Hacker

(请注意,我必须将_x();更改为A::_x();才能运行您的代码。)

如果要将输出放在文件中,请添加LineInfo=filenamehere。详情请参见perldoc perldebug。(尤其是,如果您将选项更改为frame=2,您还会收到从子例程返回的消息。)

CODE引用用于use语句周围的隐式BEGIN块:

use strict;

真正的意思是

BEGIN {
    require "strict.pm";
    strict->import();
}

这篇关于如何打印所有已执行的子例程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆