运行 perl 程序时遇到以下错误
*** glibc detected *** perl: double free or corruption (!prev): 0x0c2b7138 ***
/lib/tls/i686/cmov/libc.so.6[0xb7daea85]
/lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7db24f0]
perl(Perl_pregfree+0x3e)[0x80a004e]
perl(perl_destruct+0xcf1)[0x806b711]
/usr/local/lib/perl/5.8.8/auto/threads/threads.so[0xb79d2dfb]
/usr/local/lib/perl/5.8.8/auto/threads/threads.so[0xb79d2f9b]
/usr/local/lib/perl/5.8.8/auto/threads/threads.so[0xb79d5fbb]
/lib/tls/i686/cmov/libpthread.so.0[0xb7e974fb]
/lib/tls/i686/cmov/libc.so.6(clone+0x5e)[0xb7e19e5e]
我的操作系统是Ubuntu 8.04,Perl版本是5.8.8
我的脚本包含线程...我无法共享代码,但想知道是否有人有过此类错误的经验以及您如何解决/处理/分析它。除了解决此类问题之外,还有什么工具/日志可供我参考吗?
感谢您的支持。
P.S:我知道线程并不是任何人的理想朋友。然而我不控制使用 perl 的决定。我只是维护代码。
打开您的代码并将其放入某处在问题发生之前:
$DB::single=1;
然后运行
PERL5OPT='-dt' perl yourscript.pl
and hit
c[enter]
反复进行,直到问题再次出现。 (记下它是否在失败之前停止在手动断点处)。
然后迭代地向前/向后移动手动断点,直到获得为止just在终止点之前(您也可以使用一堆打印命令找到死亡点),然后尝试从那里开始工作,可能会进行崩溃前的内省。
这将(希望)帮助您生成一个显示问题的测试用例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)