- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一定做了perl
非常沮丧,因为它给了我一条错误消息,perldiag
中没有记录。 :
PmmREFCNT_dec: REFCNT decremented below 0 for 53a6930!.
*** glibc detected *** /usr/bin/perl: double free or corruption (!prev): 0x0000000004e58a60 *
Segmentation fault
Try::Tiny
时,我总是会在同一个地方捕获错误,但是当不使用它时,会在崩溃发生之前执行更多指令。此外,即使我的模块完全是确定性的,并且我很确定所有依赖项也是如此,但错误不会一直发生。
Thing
和
SetOfThings
.
SetOfThings
有一个属性,它是一组
Thing
实例。这两个类也有一个
explode
执行以下操作的方法:
# SetOfThings
sub explode {
my $self = shift;
my $new = dclone $self;
delete $new->{'some_attribute'};
$new->set_of_things( map { $_->explode } $self->constraints );
return $new;
}
# Thing
sub explode {
my $self = shift;
return map { new Thing( do_something_fancy ) } keys %$self;
}
SetOfThings::explode
时通常会出现该错误。或调用
SetOfThings::set_of_things
时作为 setter/getter 。
gdb
获得了回溯。 :
#0 0x00007ffff70a6094 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ffff70a76a8 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007ffff70aab1c in free () from /lib/x86_64-linux-gnu/libc.so.6
#3 0x00007ffff7b0869b in Perl_hv_undef_flags () from /usr/lib/libperl.so.5.14
#4 0x00007ffff7b1ae66 in Perl_sv_clear () from /usr/lib/libperl.so.5.14
#5 0x00007ffff7b1b292 in Perl_sv_free2 () from /usr/lib/libperl.so.5.14
#6 0x00007ffff7b04bc3 in Perl_hv_free_ent () from /usr/lib/libperl.so.5.14
#7 0x00007ffff7b04e6e in ?? () from /usr/lib/libperl.so.5.14
#8 0x00007ffff7b08683 in Perl_hv_undef_flags () from /usr/lib/libperl.so.5.14
#9 0x00007ffff7b1ae66 in Perl_sv_clear () from /usr/lib/libperl.so.5.14
#10 0x00007ffff7b1b292 in Perl_sv_free2 () from /usr/lib/libperl.so.5.14
#11 0x00007ffff7b42cef in Perl_leave_scope () from /usr/lib/libperl.so.5.14
#12 0x00007ffff7b11112 in Perl_pp_leave () from /usr/lib/libperl.so.5.14
#13 0x00007ffff7b0bce6 in Perl_runops_standard () from /usr/lib/libperl.so.5.14
#14 0x00007ffff7aad815 in perl_run () from /usr/lib/libperl.so.5.14
#15 0x0000000000400f89 in main ()
valgrind
中得到的.虽然我仍然不确定发生了什么,但至少现在我知道该怪谁了。 :-)
==27226== Invalid free() / delete / delete[] / realloc()
==27226== at 0x4C27D4E: free (vg_replace_malloc.c:427)
==27226== by 0xA138F42: PmmREFCNT_dec (in /usr/lib/perl5/auto/XML/LibXML/LibXML.so)
==27226== by 0xA11D3FA: XS_XML__LibXML__Node_DESTROY (in /usr/lib/perl5/auto/XML/LibXML/LibXML.so)
==27226== by 0x4EE770B: Perl_pp_entersub (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4E7AB90: Perl_call_sv (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EEDBD8: Perl_sv_clear (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EEE291: Perl_sv_free2 (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4ED7BC2: Perl_hv_free_ent (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4ED7E6D: ??? (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EDB682: Perl_hv_undef_flags (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EEDE65: Perl_sv_clear (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EEE291: Perl_sv_free2 (in /usr/lib/libperl.so.5.14.2)
==27226== Address 0x17d0b710 is 0 bytes inside a block of size 32 free'd
==27226== at 0x4C27D4E: free (vg_replace_malloc.c:427)
==27226== by 0xA138F42: PmmREFCNT_dec (in /usr/lib/perl5/auto/XML/LibXML/LibXML.so)
==27226== by 0xA11D3FA: XS_XML__LibXML__Node_DESTROY (in /usr/lib/perl5/auto/XML/LibXML/LibXML.so)
==27226== by 0x4EE770B: Perl_pp_entersub (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4E7AB90: Perl_call_sv (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EEDBD8: Perl_sv_clear (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EEE291: Perl_sv_free2 (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4ED7BC2: Perl_hv_free_ent (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EDA919: Perl_hv_common (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4F0EEC7: Perl_pp_delete (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4EDECE5: Perl_runops_standard (in /usr/lib/libperl.so.5.14.2)
==27226== by 0x4E80814: perl_run (in /usr/lib/libperl.so.5.14.2)
最佳答案
报价 ikegami的评论,因为我无法更好地表述它:
It's a bug in Perl or in an XS module. A variable should be freed when its reference count reaches zero, but something attempted to decrement a variable's reference count when it was already zero.
valgrind
的输出表明,在这个特定的例子中,问题出在
XML::LibXML
.
XML::LibXML
,正如
Sinan Ünür 所建议的那样只要问题被理解和解决就是要走的路。不幸的是,从 2.0001(Debian 稳定版)更新到 2.0116(CPAN 版)并没有修复它。
SetOfThings::explode
以便它创建一个新实例并复制它需要的属性,而不是克隆当前实例并删除不需要的属性:
sub explode {
my $self = shift;
my $new = __PACKAGE__->new;
$new->some_attribute('whatever');
$new->set_of_things( map { $_->explode } $self->constraints );
return $new;
}
SetOfThings
的属性之一被克隆然后删除的对象是一个 DOM,很明显
XML::LibXML
没有欣赏。多亏了这些知识和发表的评论,我终于能够在一个非常小的脚本中重现我的问题并发布
bug report :
#!/usr/bin/perl
use strict;
use warnings;
use Clone 'clone';
use XML::LibXML;
my $dom1 = new XML::LibXML::Document;
my $dom2 = clone $dom1;
XML::LibXML
确实提供了
cloneNode
方法,因此将最后一行更改为
my $dom2 = $dom1->cloneNode(1)
关于perl - "PmmREFCNT_dec: REFCNT decremented below 0"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569633/
我目前正在用 C++ 重新发明线程池的轮子。除了以下构造的多个实例之外,我已经从代码中消除了几乎所有的锁: std::atomic_size_t counter; void produce() {
嘿嘿,我知道如何在 SharedPreferences 中保存变量和其他数据,但我想知道如何每天递减一个变量。 这个 var (int) 已经在共享首选项中,并且我们每天递减 -1。 例如,我知道用户
我正在尝试解决 this UVa problem . 我正在尝试使用 Vector 来解决问题。我需要模拟循环链表之类的东西,所以我使用迭代器来访问元素。但是在尝试之后,我发现 Vector 迭代器在
在过去,我这样做: List _Items = GetItems(); int _CountDown = _Items.Count; using (BackgroundWorker _Worker =
我对 UIStepper 有一个奇怪的问题(它伴随着 UITextField) 考虑这个代码片段: @interface LTRPageTracker : UIView { UIStepp
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
++ 增量 x = ++y // When y = 6 x = 6 x = y++ // And y = 6 x = 5 -- 递减 x = --y // W
我正在尝试创建一个成员函数,该函数应该使用列表来复制堆栈。所以我必须以相反的顺序打印列表的元素。我的头文件中有一个私有(private)列表声明为: class miniStackLT { priva
目前,我不得不写出多个for-loops,它们都执行相同的任务,不同之处在于中的初始化、条件和递减/递增>for-loops 本身。 这是我到目前为止的类似示例: if(some_bool_condi
我一定做了perl非常沮丧,因为它给了我一条错误消息,perldiag 中没有记录。 : PmmREFCNT_dec: REFCNT decremented below 0 for 53a6930!.
我有一个 pandas 系列如下... 0 2039-03-16 1 2056-01-21 2 2051-11-18 3 2064-03-05 4 2048-06-05 Name: BIRT
我正在尝试通过在我的 Controller 中使用内联来从我在数据库中的一个表中获取金额 public ActionResult IfPaid(int id) { Re
我们如何用 C 语言打印下面的模式?请解释一下逻辑。 1 12A 123BA 1234CBA 12345DCBA 1234
我在 DynamoDB 表中有一个类型为 Number 的键。我将操作设置为 ADD 以将值添加到现有值。 DynamoDBAttributeValue *attr =
在参数列表中调用 va_arg 时,我试图访问下一个或上一个元素。 “n”实际上是参数列表的长度。 va_list pointer; va_start(pointer, n); int temp =
我正在用左右两个按钮制作幻灯片,当单击按钮时,图像 src 发生变化,新图像出现。图像的位置存储在一个数组中,++ 运算符用于将照片移动到下一张,-- 用于上一张有时它不起作用我必须双击按钮工作。为什
到目前为止,我只是简单地使用“更改”来查看“数字”类型的输入字段是否已更改。但是,现在我需要知道数字是递增还是递减以执行不同的操作。我怎样才能看到号码是如何更改的? 寻找 JQuery 的解决方案,但
本文整理了Java中us.ihmc.yoVariables.variable.YoInteger.decrement()方法的一些代码示例,展示了YoInteger.decrement()的具体用法。
我想在表上有负的自动生成的键。 代替键:1,2,3,..,X我想要键:-1,-2,-3,...,-X 我需要这个,因为我必须创建一个镜像表以在 UNION 中与原始表一起使用,并“了解”哪些记录来自原
我有一张表 total_count +----+--------+-------+------+---------+---------+---------+ | id | studid | month
我是一名优秀的程序员,十分优秀!