突然间,我开始看到这样的行:

SV = PVIV(0x38fe3f0) at 0x3de5b80
  REFCNT = 1
  FLAGS = (PADMY)
  IV = 0
  PV = 0

这些并不一致出现,如果我重复运行脚本,使用相同的输入,这个输出有时会出现,有时甚至两次,有时根本不出现。

每隔一段时间,脚本就会挂起并显示一条错误消息,指出“Perl 不幸停止运行”。

它显然是 Devel::Peek 的输出,但我的模块都没有使用它,我使用的唯一 CPAN 模块是 Log::Log4perl,
Data::Dumper::AutoEncode(当然使用 Data::Dumper)和 List::Util。
所有这些我都广泛使用,但我从未得到过这种输出。

盒子:Win-7 Pro 64 位

我的 perl5 (revision 5 version 18 subversion 2) 配置总结:
  Platform:
    osname=MSWin32, osvers=6.2, archname=MSWin32-x64-multi-thread
    uname='Win32 strawberry-perl 5.18.2.1 #1 Tue Jan  7 22:32:35 2014 x64'

有人可以建议我可以采取的步骤来找到它的起源以及它发生的原因吗?

谢谢

最佳答案

在脚本的顶部,添加以下内容:

BEGIN {
    use Carp qw( );
    use Devel::Peek qw( );
    my $old = \&Devel::Peek::Dump;
    my $new = sub { Carp::cluck("Devel::Peek::Dump got called somewhere!"); &$old };
    no warnings 'redefine';
    *Devel::Peek::Dump = $new;
}

这需要在任何人从 Devel::Peek 导入 o​​jit_code 之前发生。
Dump 的输出将包括堆栈跟踪。

关于perl - 如何追踪 Devel::Peek 的起源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33960768/

10-12 15:36