[Moscow.pm] Помогите найти багу
Михаил Монашёв
postmaster на softsearch.ru
Сб Дек 22 02:54:13 PST 2007
Здравствуйте Сергей,
А как в DESTROY узнать, что он второй раз вызывается? Если я смогу это
сделать, то будет хоть понятно какой объект глючит...
>> Под mod_perl-ом в лог ошибок Апача падают иногда вот такие ошибки:
>>
>> DESTROY created new reference to dead object
>> 'BlogLibs::User::Guest' during global destruction.
>>
>> Поиски этой ошибки пока безрезультатны. Совершенно не ясно как её
>> локализовать, и когда она происходит.
СМ> Происходит она, очевидно, during global destruction :) Я с таким не
СМ> сталкивался, поэтому погуглил... Сама ошибка описана в perdiag:
СМ> DESTROY created new reference to dead object '%s'
СМ> (F) A DESTROY() method created a new reference to the object which
СМ> is just being DESTROYed. Perl is confused, and prefers to abort rather
СМ> than to create a dangling reference.
СМ> Минимальный код, иллюстрирующий ошибку:
СМ> perl -e 'use strict; sub DESTROY {$a=shift}; bless[];'
СМ> Т.е. ситуация такова, что в DESTROY создается новая ссылка на объект,
СМ> применительно к которому DESTROY вызван. Как правильно заметил Макс,
СМ> это легко можно допустить при использовании AUTOLOAD:
СМ> % perl -e 'sub AUTOLOAD {warn $AUTOLOAD;$a=shift}; $b=bless[];'
СМ> main::DESTROY at -e line 1 during global destruction.
СМ> DESTROY created new reference to dead object 'main' during global destruction.
СМ> Наиболее адекватная заметка про это в инете -
СМ> http://grokbase.com/post/2003/12/08/perl-24627-destroy-message-not-in-perldiag-pod/iQ9IlS68tEPtbsm0vVKtNSPmJxY
--
С уважением,
Михаил Монашёв, SoftSearch.ru
mailto:postmaster на softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.
Подробная информация о списке рассылки Moscow-pm