[Moscow.pm] Помогите найти багу
Сергей Мартынов
sergey на martynov.info
Чт Дек 20 12:09:28 PST 2007
> Под 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
--
С уважением, Сергей Мартынов.
Подробная информация о списке рассылки Moscow-pm