PhpUnit не показывает трассировку стека для фатальной ошибки php

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

Как его настроить для этого?

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. Фатальный означает смертельный.

Это неуклюжий, но эффективный способ, которым я нашел получение дампа стека, когда 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); }