突然间我开始看到这样的线条:
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 (修订版5版本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'有人能建议我可以采取什么措施来找出这种情况的根源以及发生的原因吗?
谢谢
发布于 2015-11-27 15:53:09
在脚本顶部添加以下内容:
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导入Dump之前发生。
Carp::cluck的输出将包括堆栈跟踪。
发布于 2015-11-27 16:47:15
也许你找不到信息的来源,因为你找错了东西。它也可以是来自XS模块的sv_dump输出。
use Inline C => <<'__EOI__';
void dump_sv(SV* sv) {
sv_dump(sv);
}
__EOI__
dump_sv(1);输出:
SV = IV(0x34cd588) at 0x34cd598
REFCNT = 1
FLAGS = (IOK,READONLY,PROTECT,pIOK)
IV = 1查找这些呼叫的选项:
perl,并在sv_dump中设置断点。(最可靠).dll文件的符号,并为sv_dump对它们进行grep。(也许?)发布于 2016-01-14 10:04:37
谢谢你们大家。
罪魁祸首很可能是在几次DB检索操作之后缺少$sth->finish;语句。因为我添加了这些信息,我再也看不到这些信息了!
https://stackoverflow.com/questions/33960768
复制相似问题