使用Perl / TK的perl程序中的错误是否会导致内存损坏

时间:2012-09-07 06:31:42

标签: perl tk

我有一个不幸的任务是维护一个孤立的Perl程序,该程序使用Perl / TK创建GUI并在某些情况下崩溃,如

*** glibc detected *** /usr/bin/perl: corrupted double-linked list: 0x0000000003daf500 ***

Perl程序是否可能包含导致此类行为的错误,或者我可以安全地认为Perl解释器和/或Perl / Tk中的错误是负责的,并且等待这些工具的新版本可能是摆脱这个问题的最佳方法是什么?

编辑:为了让我的问题更清楚:尝试两次销毁小部件或在已经销毁的小部件上调用方法的错误会导致干净的错误消息,还是可能导致我遇到的问题?

EDIT2:Perl版本为5.10.0/x86_64-linux-thread-multi

它使用这个模块:

use Tie::Watch;
use Tk;
use Tk::Balloon;
use Tk::Compound;
use Tk::DialogBox;
use Tk::LabFrame;
use Tk::NoteBook;
use Tk::Pane;
use Tk::ROText;
use DBI;
use Data::Dumper;
use XML::Simple::DTDReader;

1 个答案:

答案 0 :(得分:4)

是的,这是可能的,但在这种情况下不太可能。

有多种方法可以直接访问(和修改)Perl中的程序存储器(就此而言,任何编程语言)。有这样的扩展(Win32 :: Process :: Memory for Windows),但在Linux下最简单的方法是打开/ proc / pid / map(进程内存,映射到随机访问)文件)并操纵它。

所以,绝对有可能。

然而

非常不可能你的Perl程序正在使用这些技巧中的任何一个来直接操作自己的内存。正如您所想,最可能的罪魁祸首之一是使用的库之一(在这种情况下为Tk)。

您可以尝试使用Devel::Trace模块来查看程序在崩溃之前尝试执行的操作。

如果您发现它总是在特定行上崩溃,您可以尝试更改其行为以避免触发底层库中的错误。不过,那是一个有点昙花一现的事情。

如果有人知道Perl / Tk中的这种错误可能会有所帮助。您的程序是否使用其他库使用C库(例如,不是“纯perl”库)而不是Tk?