[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