kin*_*pin 5 debugging perl glibc
运行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
我的脚本包含线程...我无法共享代码,但想知道是否有人遇到过这种类型的错误,以及您是如何解决/接近/分析它的.是否有任何工具/日志可以参考此类问题.
感谢您的支持.
PS:我知道线程不是任何人的理想朋友.但是我不控制使用perl的决定.我只是维护代码.
打开您的代码并将其放入出现问题之前的某个位置:
$DB::single=1;
Run Code Online (Sandbox Code Playgroud)
然后运行
PERL5OPT='-dt' perl yourscript.pl
Run Code Online (Sandbox Code Playgroud)
并击中
中心]
反复进行,直到问题再次出现。(记下它是否在失败之前停止在手动断点处)。
然后迭代地向前/向后移动手动断点,直到它就在终止点之前(您也可以使用一堆打印命令找到死亡点),然后尝试从那里开始工作,可能会进行崩溃前内省。
这将(希望)帮助您生成一个显示问题的测试用例。