首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl堆栈跟踪(Devel:: Trace )

Perl堆栈跟踪(Devel:: Trace )
EN

Stack Overflow用户
提问于 2013-12-12 08:58:41
回答 1查看 1.2K关注 0票数 1

我尝试使用Devel::Trace作为代码的调试器来获取perl堆栈跟踪。

代码语言:javascript
复制
perl -d:Trace <pgm>

还尝试在perl代码中使用$Devel::Trace::TRACE = 0;Devel::Trace::trace('on');。但却找不到踪迹。

有人能用一个例子来说明Devel::Trace在perl代码中的用法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-12 10:18:36

Devel::Trace不生成堆栈跟踪。相反,它打印出当前正在执行的语句。示例:

代码语言:javascript
复制
$ cat script.pl
    use feature 'say';
    my $foo = "bar";
    say $foo;
$ perl -d:Trace script.pl
>> script.pl:2:     my $foo = "bar";
>> script.pl:3:     say $foo;
bar

在代码中,可以为某些区域打开或关闭跟踪:

代码语言:javascript
复制
$ cat script.pl
    use feature 'say';
    my $foo = "bar";
    for my $n (1 .. 3) {
      local $Devel::Trace::TRACE = 0;
      say $foo x $n;
    }
    say "That were some ${foo}s";
$ perl -d:Trace script.pl
>> script.pl:2:     my $foo = "bar";
>> script.pl:3:     for my $n (1 .. 3) {
>> script.pl:4:       local $Devel::Trace::TRACE = 0;
bar
>> script.pl:4:       local $Devel::Trace::TRACE = 0;
barbar
>> script.pl:4:       local $Devel::Trace::TRACE = 0;
barbarbar
>> script.pl:7:     say "That were some ${foo}s";
That were some bars

如您所见,say $foo x $n行不包含在跟踪输出中,因为我在该范围内转了跟踪。

如果您想要堆栈跟踪(如“调用堆栈跟踪”中所示),请使用Carp模块:

代码语言:javascript
复制
$ cat script.pl
    use Carp ();

    foo("Hello World");

    sub foo { bar(@_) }
    sub bar { baz(@_) }
    sub baz { qux(@_) }
    sub qux { Carp::cluck "Howdy!" }
$ perl script.pl
Howdy! at so1.pl line 8.
        main::qux('Hello World') called at script.pl line 7
        main::baz('Hello World') called at script.pl line 6
        main::bar('Hello World') called at script.pl line 5
        main::foo('Hello World') called at script.pl line 3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20538994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档