php-5.3, обработка исключений, баг?

crocodile2u

http://vbolshov.org.ru
php-5.3, обработка исключений, баг?

Вопрос, очевидно, к Тони...

Я, правда, сразу прошу прощения за то, что внятный баг-репорт у меня пока написать не получается: никак не могу выделить небольшой самостоятельный кусок кода, воспроизводящий ситуацию.

Вкратце (я очень надеюсь, что и такое описанеи проблемы, возможно, чем-то поможет и наведет на какую-то мысль).

1. Если отлавливать исключения с помощью try/catch - никаких проблем.
2. Проблемы начинаются при использовании set_exception_handler() - и то не всегда (например, как я уже сказал, сделать небольшой тестовый кусок кода, воспроизводящий баг, у меня не получилось). Какого рода проблемы:
- в exception_handler начинает странно вести себя autoload (точнее, я регистрировал автолоады с пом. spl_autoload_register()): нужный файл с нужным классом подключается, но после этого выдается ошибка "Class not found", несмотря на то, что, если создать экземпляр класса вне exception_handler'a - он отлично создается.
- если заранее подгрузить все необходимые для работы exception_handler'a классы - возникает ошибка Exception thrown without a stack frame in /x/y/z.php on line 0 и выполнение все равно прекращается.

Проблемный билд - позавчерашний снапшот, в альфа-релизе php-5.3.alpha проблемы нет. Вечером попробую воспроизвести с сегодняшним снапшотом.

Тони, если от меня нужно что-то, я предоставлю, вплоть до целого приложения, в котором возникает проблема :)
 

crocodile2u

http://vbolshov.org.ru
tony2001
Все, что я могу сказать пока что: "я очень надеюсь, что и такое описанеи проблемы, возможно, чем-то поможет и наведет на какую-то мысль" :(

На самом деле, я просто надеялся, когда публиковал этот пост - что, возможно, нечто похожее уже известно... но раз это не так - буду продолжать изыскания. Как уже говорил, поставлю последний снапшот для начала.
 

tony2001

TeaM PHPClub
мне сложно предположить с чем конкретно это может быть связано, т.к. потенциально виновных патчей много, но все они ооочень косвенно касаются этой темы.

если можешь - забери из CVS вчерашние исходникики, потом позавчерашние и т.д., чтобы выяснить хотя бы после какого дня возникла проблема. в пределах 1-го дня уже проще будет.
hint:
Код:
cvs -d :pserver:[email protected]/repository co -r PHP_5_3 -D "2008-08-25 00:00:00" -d php_20080825 php-src
ну и reproduce case, конечно..
 

fixxxer

К.О.
Партнер клуба
[telepat mode on]
если включен error handler, кидающий эксепшены - отрубай и смотри где warning/notice
 

crocodile2u

http://vbolshov.org.ru
fixxxer
Инфу об ошибке я уже посмотрел, проблема не в этом. Попробую последовать совету Тони - ну и, да, постараюсь таки сформировать reproduce case, хотя пока что я в этом не преуспел.
 

fixxxer

К.О.
Партнер клуба
может ты из автолоада эксепшен кидаешь?
это известный баг, который wontfix.

-~{}~ 26.08.08 14:20:

PHP:
<?

function __autoload($c) {
    #throw new Exception('test'); -- WON'T WORK
    // Workaround:
    eval("
        class $c {
            function __construct() {
                throw new Exception('Class $c not found');
            }
        }
    ");
}

try {
    $c = new X;
} catch (Exception $e) {
    echo "Class X not found\n";
}
 

crocodile2u

http://vbolshov.org.ru
нет, у меня другая ситуация. В exception_handler создается экземпляр логгера ($l = new Logger()) - ну и далее он делает с эксепшном, что там ему нужно.

При создании экземпляра логгера вызывается автолоад, он подключает нужный файл (проверено с пом. echo __FILE__; в подключаемом файле), но при этом возникает ошибка "Class Logger not found". Однако, если создать экземпляр логгера вне exception_handler - он нормально создается и функционирует. Такие вот пироги. Еще раз - наблюдается не во всех версиях php-5.3.
 
Сверху