PhpUnit не показывает трассировку стека для php фатальной ошибки - PullRequest
19 голосов
/ 13 мая 2011

PhpUnit в настоящее время не показывает трассировку стека для ошибок PHP, возникающих в коде.

Как мне это настроить?

Ответы [ 2 ]

8 голосов
/ 14 мая 2011

PHPUnit использует функцию обработчика ошибок для перехвата и отображения ошибок, но из руководства по PHP для обработчики ошибок ,

Следующие типы ошибок не могут быть обрабатывается пользовательской функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT поднял в файле, где set_error_handler () вызывается.

Если вы выполняете тесты в отдельном процессе, PHPUnit получит сообщение об ошибке и сообщение от интерпретатора, но трассировка стека не будет доступна. Это просто ограничение интерпретатора PHP. Фатальное средство смертельное.

3 голосов
/ 07 июля 2011

Это слабый, но эффективный способ, который я нашел, чтобы получить дамп стека, когда php его не дает.У меня есть это в класс под названием DebugUtil.

        /**
         * This is for use when you have the UBER-LAME...
         * "PHP Fatal error:  Maximum function nesting level of '100' reached,
         * aborting!  in Lame.php(1273)
         * ...which just craps out leaving you without a stack trace.
         * At the line in the file where it finally spazzes out add
         * something like...
         * DebugUtil::dumpStack('/tmp/lame');
         * It will write the stack into that file every time it passes that
         * point and when it eventually blows up (and probably long before) you
         * will be able to see where the problem really is.
         */
        public static function dumpStack($fileName)
        {
            $stack = "";
            foreach (debug_backtrace() as $trace)
            {
                if (isset($trace['file'])  &&
                    isset($trace['line'])  &&
                    isset($trace['class']) &&
                    isset($trace['function']))
                {
                    $stack .= $trace['file']     . '#' .
                              $trace['line']     . ':' .
                              $trace['class']    . '.' .
                              $trace['function'] . "\n";
                }
            }
            file_put_contents($fileName, $stack);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...